2012-10-05 9 views
6

Possible Duplicate:
PHP: 'or' statement on instruction fail: how to throw a new exception?funzione PHP vecchia scuola "o" con l'eccezione

In PHP, particolarmente popolare tra i neofiti in vari tutorial di connessione MySQL, è sempre stato in grado di fare qualcosa di simile ...

<?php 
foo() or die('foo() failed!'); 
?> 

Tuttavia se provo qualcosa di simile non riesce ...

<?php 
foo() or throw new Exception('AHH!'); 
?> 

come così ...

"Parse error: syntax error, unexpected 'throw' (T_THROW) in..."

Qualcuno sa come fare qualcosa di simile a questo? Dovrei impostare una variabile dopo "o"?

+1

Si potrebbe definire un 'ThrowException()' funzione che genera semplicemente un'eccezione. – Wiseguy

+0

Grazie a tutti per le risposte. – PolishHurricane

risposta

10

farlo nel modo meno "intelligente":

if(!foo()) { 
    throw new Exception('AHH!'); 
} 

Nel caso vi stiate chiedendo perché or throw new Exception() non funziona, è perché vi affidate alla short-circuiting del or operator: Se il primo argomento è vero, quindi non è necessario valutare il secondo per determinare se uno di essi è vero (poiché si sa già che almeno uno di questi è vero).

Non è possibile farlo con throw poiché è un'espressione che non restituisce un valore booleano (o alcun valore), quindi or non ha alcun senso.

Se davvero vuole fare questo, la risposta cancellato dallo @emie dovrebbe funzionare (fare una funzione che solo genera un'eccezione), dato che anche una funzione senza alcun valore di ritorno è valido in una dichiarazione booleana, ma sembra una cattiva idea creare una funzione del genere solo così puoi fare cose intelligenti con affermazioni booleane.

+2

In realtà, non funziona perché 'throw', proprio come' echo', 'include', ecc. È un costrutto linguistico piuttosto che una funzione :) –

+0

Sì, stavo cercando di evitare l'istruzione IF. Quindi utile, grazie ragazzi. – PolishHurricane