2011-02-05 26 views
6

¿Hay alguna forma "estática" de lanzar una excepción en php?¿Hay una forma estática de lanzar excepción en php

Necesito lanzar una excepción cuando una consulta mysql falla.

yo probamos este:

[email protected]_query($query) or throw new Exception(' Query Failed '); 

pero no está funcionando.

Y estoy usando una función basada en el throwException() function from this comment at PHP: Exceptions manual, pero me gustaría saber si hay una manera estática para hacer esto sin hacer una clase.

+0

¿Qué significa "estático"? – BoltClock

+0

por static Quiero decir sin inicializar una clase – sreejith

+0

Espero que esta declaración inútil de 'Query Failed' sea solo un ejemplo y en verdad vas a poner allí un error real junto con la consulta –

Respuesta

4

No podrá hacer directamente or throw new Exception(); porque throw es una afirmación, no una expresión. Como or es realmente un operador, espera que sus operandos sean expresiones (cosas que evalúan algunos valores).

Habría que hacer esto en su lugar:

$re = mysql_query($query); 

if (!$re) { 
    throw new Exception('Query Failed'); 
} 

Si usted está tratando de utilizar la función throwException() propuesto por ese comentario manual de PHP, como webbiedave señala el comentario está diciendo que necesita llamar esa función en lugar de la declaración throw directamente como aquí:

$re = mysql_query($query) or throwException('Query Failed'); 

no hay ninguna regla en PHP que dice que usted necesita para lanzar excepciones de un método de clase. Mientras haya alguna manera de atrapar esa excepción, estarás bien. Si quiere decir que quiere lanzar excepciones sin usar la clase Exception, debe hacerlo. Las excepciones son objetos por naturaleza; no puede lanzar una excepción que no sea un objeto (o que no herede de la clase Exception).

Si no desea lanzar excepciones pero aumenta el tipo de error que a menudo se ve en PHP (avisos, advertencias y errores fatales), use trigger_error().

$re = mysql_query($query); 

if (!$re) { 
    trigger_error('Query Failed', E_USER_ERROR); 
} 
+0

¡¡¡Es una gran idea gracias !!! – sreejith

+0

Todo en los lenguajes de programación imperativos es una afirmación;) 'throw' es una construcción de lenguaje, por lo que se trata con el analizador y no se puede evaluar el tiempo de ejecución de algunos valores, sí – meze

6

El comentario al que se vincula establece que emitir una excepción de esta manera no funcionará. Afirma que hay que colocarlo en una función:

function throwException($message = null, $code = null) { 
    throw new Exception($message, $code); 
} 

$re = mysql_query($query) or throwException('Query Failed'); 
+0

sí lo hace. Estaba buscando una forma de hacer algo como Exception :: setMessage ('Message'); Pero ahora sé que no es posible después de que BoltClock haya respondido – sreejith

+0

@rados: Y dice que llamas a la función después de 'o', pero en tu pregunta estás llamando a la declaración' throw' en vez de a la función. – BoltClock

+0

@BoltClock sí, lo que estoy haciendo ahora es algo como esto: $ re = @ mysql_query ($ query) o IException :: throwException ('Query Failed'); IException es una clase que hice yo mismo, estaba buscando una clase predefinida en lugar de usar la propia. – sreejith

2

También puede intentar algo así como

mysql_query($query); 

if (mysql_error()) { 
    throw new Exception(...); 
} 

como mysql_error() rendimientos cadena vacía si no hubo error, que evalúa a false.

+0

gracias por la respuesta, esa es una buena manera. – sreejith

Cuestiones relacionadas