2012-10-05 46 views
6

Possible Duplicate:
PHP: 'or' statement on instruction fail: how to throw a new exception?PHP función de la vieja escuela "o" con excepción

En PHP, especialmente popular entre los novatos en varios tutoriales de conexión de MySQL, que siempre he sido capaz de hacer algo como esto ...

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

Sin embargo si intento algo como esto falla ...

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

Al igual que ...

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

¿Alguien sabe cómo hacer algo similar a esto? ¿Tendría que establecer una variable después del "o"?

+1

Se podría definir un 'ThrowException()' función que simplemente lanza una excepción. – Wiseguy

+0

Gracias a todos por las respuestas. – PolishHurricane

Respuesta

10

hacerlo de la manera menos "inteligente":

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

En caso de que se esté preguntando por qué or throw new Exception() no funciona, es porque usted está confiando en la short-circuiting del or operator: Si el primer argumento es cierto, entonces no hay necesidad de evaluar el segundo para determinar si uno de ellos es verdadero (ya que usted sabe que al menos uno de ellos es verdadero).

No puede hacer esto con throw ya que es una expresión que no devuelve un valor booleano (o ningún valor), por lo que or ing no tiene ningún sentido.

Si realmente quiere hacer esto, la respuesta borrado @emie debe trabajar (hacer una función que solo se produce una excepción), ya que incluso una función sin valor de retorno es válida en un comunicado booleano, pero parece una mala idea crear una función así solo para que pueda hacer cosas inteligentes con declaraciones booleanas.

+2

En realidad, no funciona porque 'throw', al igual que' echo', 'include', etc. es una construcción de lenguaje en lugar de una función :) –

+0

Sí, estaba tratando de evitar la declaración IF. Tan útil, gracias chicos. – PolishHurricane

Cuestiones relacionadas