Ben bir uyarı yakalamaya / denemek istedim, ama aynı zamanda (örn /var/log/apache2/error.log
) oturum olağan uyarı / hata tutmak; işleyici dönmek sahip olduğu için false
. Ancak, bu yana, "yeni atmak ..." ifadesi temelde yürütme, bir sonra da tartışılan "fonksiyonunda wrap" hile yapmak zorunda keser:
Is there a static way to throw exception in php
Ya da kısaca:
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: daha yakından inceleme sonrası, bu işe yaramazsa çıkıyor: "return false && throwErrorException ...
", temelde, not istisna ve sadece hata günlüğüne giriş olacaktır; "return throwErrorException ...
" içinde, iş atma istisna yapacak, ama sonra error_log oturum olmayacak gibi "false &&
" bölümünü kaldırarak ... Ben hala bu yayınlanmıştır saklardım olsa da, ben görmedim gibi bu davranış başka bir yerde belgelenmiştir.