Zwykle skrypt php działa po E_NOTICE, czy istnieje sposób na podniesienie tego błędu do krytycznego błędu w kontekście funkcji, to znaczy, że muszę tylko wyprowadzać powiadomienia tylko w moich funkcjach, ale nie w podstawowych funkcjach php, czyli globalnie .jak zrobić wyjście php na E_NOTICE?
Odpowiedz
Można utworzyć niestandardową procedurę obsługi błędów, aby przechwycić E_NOTICE
s.
To niesprawdzone ale powinno iść w dobrym kierunku:
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if ($errno == E_USER_NOTICE)
die ("Fatal notice");
else
return false; // Leave everything else to PHP's error handling
}
następnie ustawić ją jako nową klasę obsługi błędów przy użyciu set_error_handler()
podczas wprowadzania funkcji i przywrócić obsługi błędów PHP przy opuszczaniu go:
function some_function()
{
// Set your error handler
$old_error_handler = set_error_handler("myErrorHandler");
... do your stuff ....
// Restore old error handler
set_error_handler($old_error_handler);
}
"potrzebuję tylko wyjść z powiadomienia tylko w moich funkcjach, ale nie w podstawowych funkcjach php, to jest globalnie" –
@Rikudo Dokładnie to, co powyższe robi, prawda? Czego brakuje? –
On nie chce, żeby umarł na php core E_NOTICE, ale tylko E_USER_NOTICE wywołane przez jego funkcje :) –
użyć niestandardowej procedury obsługi błędu używając set_error_handler()
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if ($errno == E_USER_NOTICE) {
die("Died on user notice!! Error: {$errstr} on {$errfile}:{$errline}");
}
return false; //Will trigger PHP's default handler if reaches this point.
}
set_error_handler('myErrorHandler');
trigger_error('This is a E_USER_NOTICE level error.');
echo "This will never be executed.";
?>
Dlaczego trzeba ograniczyć to do własnych funkcji? Jeśli podstawowa funkcja zgłasza E_NOTICE, zazwyczaj oznacza to, że używasz go nieprawidłowo (w twojej własnej funkcji). Myślę więc, że powinieneś chcieć złapać wszystkie E_NOTICE. O ile nie uruchomisz ręcznego wyzwalania za pomocą 'trigger_error', w takim przypadku powinieneś wywołać E_USER_NOTICE, co łatwo jest rozróżnić. – deceze
Przede wszystkim myślałem o tym, aby wyjść z E_NOTICE na moje funkcje, przynajmniej niektóre z nich. Myślę, że nie ma sensu pisać wyjątków dla E_USER_NOTICE, ponieważ w tym przypadku każdy programista dąży do tego, aby naprawdę wprowadzić to zawiadomienie do pracy i kontynuować wykonywanie. – rsk82
"Zawiadomienia tylko w moich funkcjach" Czy masz na myśli, że chcesz je sam wywołać (http://il2.php.net/manual/en/function.trigger-error.php)? lub są one normalnym "rdzeniem" 'E_NOTICE', które występują w twoich funkcjach? –