quería probar/coger una advertencia, pero al mismo tiempo mantener la advertencia habitual/registro de errores (por ejemplo, en /var/log/apache2/error.log
); para lo cual el controlador debe devolver false
. Sin embargo, puesto que el "tiro de nuevo ..." declaración básicamente interrumpe la ejecución, a continuación, uno tiene que hacer el truco "envolver en la función", también se discutió en:
Is there a static way to throw exception in php
O, en pocas palabras:
function throwErrorException($errstr = null,$code = null, $errno = null, $errfile = null, $errline = null) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) {
return false && throwErrorException($errstr, 0, $errno, $errfile, $errline);
# error_log("AAA"); # will never run after throw
/* Do execute PHP internal error handler */
# return false; # will never run after throw
}
...
set_error_handler('warning_handler', E_WARNING);
...
try {
mkdir($path, 0777, true);
} catch (Exception $e) {
echo $e->getMessage();
// ...
}
EDIT: después de una inspección más cercana, resulta que no funciona: el "return false && throwErrorException ...
" será, básicamente, no emitir la excepción, y sólo tiene que entrar en el registro de errores; eliminar la parte "false &&
", como en "return throwErrorException ...
", hará que la excepción funcione, pero luego no iniciará sesión en el error_log ... Aún así lo mantendré informado, ya que no he visto documentado este comportamiento en otra parte.
http://stackoverflow.com/questions/136899/suppress-error-with-operator-in-php es una buena discusión sobre este tipo de cosas. – Mez
hubo una respuesta debajo que se eliminó? ya sea por el propietario o por alguien? – user121196
vea también: http://stackoverflow.com/questions/1087365 – dreftymac