try funciona exceptions custom catch all php exception-handling drupal-6 try-catch

funciona - Lanzar excepciones en un bloque PHP Try Catch



try catch php mysqli (5)

Para volver a hacer hacer

throw $e;

no el mensaje

Tengo una función PHP en un archivo Drupal 6 .module. Estoy intentando ejecutar validaciones de variables iniciales antes de ejecutar tareas más intensivas (como consultas de bases de datos). En C #, solía implementar sentencias IF al comienzo de mi bloque Try que arrojaba nuevas excepciones si fallaba una validación. La excepción arrojada quedaría atrapada en el bloque Catch. El siguiente es mi código PHP:

function _modulename_getData($field, $table) { try { if (empty($field)) { throw new Exception("The field is undefined."); } // rest of code here... } catch (Exception $e) { throw $e->getMessage(); } }

Sin embargo, cuando trato de ejecutar el código, me dice que los objetos solo pueden lanzarse dentro del bloque Catch.

¡Gracias por adelantado!


Simplemente elimine el throw del bloque catch - cámbielo a un echo o maneje el error.

No te está diciendo que los objetos solo pueden arrojarse al bloque catch, te está diciendo que solo se pueden lanzar objetos , y que la ubicación del error está en el bloque catch. Hay una diferencia.

En el bloque catch estás tratando de lanzar algo que acabas de atrapar, que en este contexto tiene poco sentido de todos modos, y lo que estás tratando de lanzar es una cuerda.

Una analogía del mundo real de lo que está haciendo es atrapar una pelota, y luego tratar de arrojar solo el logotipo del fabricante en otro lugar. Solo puedes lanzar un objeto completo, no una propiedad del objeto.


Throw necesita un objeto instanciado por /Exception . Solo el $e atrapado puede jugar el truco.

throw $e


function _modulename_getData($field, $table) { try { if (empty($field)) { throw new Exception("The field is undefined."); } // rest of code here... } catch (Exception $e) { /* Here you can either echo the exception message like: echo $e->getMessage(); Or you can throw the Exception Object $e like: throw $e; */ } }


throw $e->getMessage();

Intentas tirar una string

Como nota al margen: las excepciones suelen ser para definir estados excepcionales de la aplicación y no para mensajes de error después de la validación. No es una excepción, cuando un usuario le da datos no válidos