set_error_handlerStabilește o funcție definită de utilizator pentru prelucrarea erorilor
&reftitle.description;
mixedset_error_handlercallableerror_handlerinterror_typesE_ALL | E_STRICT
Stabilește o funcție a utilizatorului (error_handler)
pentru a prelucra erorile într-un script.
Această funcție poate fi utilizată pentru definirea propriului dumneavoastră
mod de a prelucra erorile în timpul rulării, spre exemplu în aplicații în
care este nevoie de a efectua curățirea datelor / fișierelor atunci când
survine o eroare critică, sau când aveți nevoie să declanșați o eroare în
anumite circumstanțe (utilizând trigger_error).
Este important de a ține minte că funcția standardă de prelucrare a erorii a
PHP este ocolită complet pentru tipurile de erori specificate în
error_types dacă funcția de apel invers nu întoarce
&false;. Setările error_reporting nu vor avea nici un
efect și funcția dumneavoastră de prelucrare a erorii va fi apelată în orice
caz - însă puteți totuși citi valoarea curentă a
error_reporting și să acționați
corespunzător. Merită de menționat că această valoare va fi 0 dacă
instrucțiunea care a cauzat eroarea a fost prefixată cu
operatorul de
control al erorii @.
De asemenea observați ca este responsabilitatea dumneavoastră să efectuați
die dacă este necesar. Dacă funcția de prelucrare a
erorii întoarce controlul execuției, execuția scriptului continuă cu
următoarea instrucțiune după acea care a cauzat eroarea.
Următoarele tipuri de erori nu pot fi prelucrate de o funcție definită de
utilizator: E_ERROR, E_PARSE,
E_CORE_ERROR, E_CORE_WARNING,
E_COMPILE_ERROR, E_COMPILE_WARNING,
indiferent de locul unde au fost emise și majoritatea
E_STRICT ce survin în fișier, unde
set_error_handler este apelat.
Dacă erorile survin înainte de execuția script-ului (de ex. la încărcarea
fișierelor), funcțiile proprii de prelucrare a erorilor nu pot fi apelate,
deoarece încă nu sunt înregistrate la acel moment.
&reftitle.parameters;
error_handler
O funcție de apel invers cu următoarea semnătură &null; poate fi transmisă
pentru a restabili acest handler la starea sa implicită. În loc de
denumirea funcției, un tablou ce conține o referință la obiect și
denumirea metodei pot fi furnizate.
boolhandlerinterrnostringerrstrstringerrfileinterrlinearrayerrcontexterrno
Primul parametru, errno, conține nivelul
erorii (tip integer).
errstr
Al doilea parametru, errstr, conține mesajul
de eroare (tip string).
errfile
Al treilea parametru opțional, errfile,
conține denumirea fișierului în care a avut loc eroarea (tip string).
errline
Al patrulea parametru opțional, errline,
conține numărul liniei unde a avut loc eroarea (tip integer).
errcontext
Al cincilea parametru opțional, errcontext,
este un tablou ce indică spre tabelul de simboluri activ la momentul
când a avut loc eroarea. Cu alte cuvinte,
errcontext va conține un tablou cu toate
variabilele ce au existat în contextul în care s-a produs eroarea.
Funcția de prelucrare a erorii definită de utilizator nu trebuie să
modifice contextul erorii.
Acest parametru este ÎNVECHIT începând cu PHP 7.2.0.
Utilizarea acestuia este foarte descurajată.
Dacă funcția întoarce &false;, atunci funcția normală de gestiune a
erorii continuă.
error_types
Poate fi utilizat pentru a masca declanșarea funcției
error_handler în mod asemănător cum setarea ini
error_reporting controlează
care erori sunt afișate. Fără această mască stabilită
error_handler va fi apelată la orice eroare,
indiferent de setările
error_reporting.
&reftitle.returnvalues;
Întoarce un string conținând funcția de prelucrare a erorii definită
anterior (dacă există). Dacă se utilizează funcția implicită de prelucrare
a erorii, va fi întors &null;. &null; este întors de asemenea și în cazul
unei erori, cum ar fi o funcție de prelucrare a erorii invalidă. Dacă
funcția precedentă de prelucrare a erorii era o metodă a unei clase, această
funcție va întoarce un tablou indexat, incluzând clasa și denumirea metodei.
&reftitle.changelog;
&Version;&Description;7.2.0
Parametrul errcontext a devenit învechit. Utilizarea
acestui parametru acum emite o notificare E_DEPRECATED.
5.5.0error_handler acum acceptă &null;.
5.2.0
Funcția de prelucrare a erorii trebuie să întoarcă &false; pentru a
popula $php_errormsg.
&reftitle.examples;
Controlul erorilor cu set_error_handler și trigger_error
Exemplul ce urmează demonstrează prelucrarea excepțiilor interne prin
generarea erorilor și prelucrarea lor cu ajutorul unei funcții definite de
utilizator:
My ERROR [$errno] $errstr \n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ") \n";
echo "Aborting... \n";
exit(1);
case E_USER_WARNING:
echo "My WARNING [$errno] $errstr \n";
break;
case E_USER_NOTICE:
echo "My NOTICE [$errno] $errstr \n";
break;
default:
echo "Unknown error type: [$errno] $errstr \n";
break;
}
/* Nu executa funcția internă a PHP de prelucrare a erorii */
return true;
}
// Funcție pentru a verifica prelucrarea erorilor
function scale_by_log($vect, $scale)
{
if (!is_numeric($scale) || $scale <= 0) {
trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale", E_USER_ERROR);
}
if (!is_array($vect)) {
trigger_error("Incorrect input vector, array of values expected", E_USER_WARNING);
return null;
}
$temp = array();
foreach($vect as $pos => $value) {
if (!is_numeric($value)) {
trigger_error("Value at position $pos is not a number, using 0 (zero)", E_USER_NOTICE);
$value = 0;
}
$temp[$pos] = log($scale) * $value;
}
return $temp;
}
// Se stabilește funcția de prelucrare a erorilor definită de utilizator
$old_error_handler = set_error_handler("myErrorHandler");
// declanșăm unele erori, în primul rând definim un tablou mixt cu un element non-numeric
echo "vector a\n";
$a = array(2, 3, "foo", 5.5, 43.3, 21.11);
print_r($a);
// acum generăm următorul tablou
echo "----\nvector b - a notice (b = log(PI) * a)\n";
/* Valoarea din poziția $pos nu este un număr, se va utiliza 0 (zero) */
$b = scale_by_log($a, M_PI);
print_r($b);
// aici este o problemă: se transmite un string în loc de un array
echo "----\nvector c - a warning\n";
/* Vector de intrare incorect, se așteaptă un tablou de valori */
$c = scale_by_log("not array", 2.3);
var_dump($c); // NULL
// aceasta este o eroare critică, logaritmul lui zero, sau a unui număr negativ este nedefinit
echo "----\nvector d - fatal error\n";
/* log(x) pentru x <= 0 nu este definit, ați utilizat: scale = $scale" */
$d = scale_by_log($a, -2.5);
var_dump($d); // Niciodată nu se ajunge aici
?>
]]>
&example.outputs.similar;
2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)
----
vector b - a notice (b = log(PI) * a)
My NOTICE [1024] Value at position 2 is not a number, using 0 (zero)
Array
(
[0] => 2.2894597716988
[1] => 3.4341896575482
[2] => 0
[3] => 6.2960143721717
[4] => 49.566804057279
[5] => 24.165247890281
)
----
vector c - a warning
My WARNING [512] Incorrect input vector, array of values expected
NULL
----
vector d - fatal error
My ERROR [256] log(x) for x <= 0 is undefined, you used: scale = -2.5
Fatal error on line 35 in file trigger_error.php, PHP 5.2.1 (FreeBSD)
Aborting...
]]>
&reftitle.seealso;
ErrorExceptionerror_reportingrestore_error_handlertrigger_errorconstantele nivelelor de erori