Operatory Kontroli Błędów

PHP obsługuje obecnie jeden operator kontroli błędów : znak małpy ( @ ) . Jeśli znak ten zostanie postawiony przed dowolnym wyrażeniem w PHP , jakiekolwiek powiadomienia o błędach wygenerowane przez to wyrażenie zostaną pominięte ( nie będą wyświetlone ) .

Jeśli mechanizm track_errors został włączony , jakiekolwiek powiadomienie o błędzie zostanie zapisane do zmiennej globalnej $php_errormsg . Należy jednak pamiętać , że zawartość tej zmiennej jest nadpisywana przy każdym błędzie , więc po wystąpieniu kolejnego błędu w skrypcie , informacja o poprzednim błędzie jest tracona .

 
?php

 
/

 
*

 
Zamierzony

 
błąd

 
obsługi

 
pliku

 
*

 
/

 
$my_file

 
=

 
@file

 
(

 
'nieistniejący_plik'

 
)

 
or

 
die

 
("Błąd

 
przy

 
otwieraniu

 
pliku

 
:

 
treść

 
błędu

 
:

 
'$php_errormsg'")

 
;

 
/

 
/

 
mechanizm

 
ten

 
działa

 
dla

 
wszystkich

 
wyrażeń

 
,

 
nie

 
tylko

 
dla

 
funkcji

 
:

 
$value

 
=

 
@$cache[$key]

 
;

 
/

 
/

 
spowoduje

 
niewyświetlenie

 
powiadomienia

 
,

 
jeśli

 
nie

 
istnieje

 
wpis

 
do

 
tablicy

 
o

 
/

 
/

 
indeksie

 
$key

 
.

 

?





Notatka : Operator @ działa tylko na wyrażeniach . Tłumacząc to łopatologicznie : jeśli da się pobrać wartość czegoś , można postawić operator @ przed tym czymś . Zgodnie z powyższą regułą , można postawić @ przed zmiennymi , wywołaniami funkcji , instrukcjami include( ) , stałymi , itp . Nie można stawiać @ przed definicjami funkcji bądź klasy , lub strukturami warunkowymi , takimi jak if lub foreach , itd .

Patrz także : error_reporting( ) .

Notatka : Operator " @ " nie ukrywa komunikatów o błędach , które wynikiem błędu parsowania (parse error ) .

Ostrzeżenie

Obecnie operator kontroli błędów " @ " wyłączy wyświetlanie powiadomienia o błędzie nawet dla błędów krytycznych , które przerwą wykonywanie skryptu . Oznacza to , że jeśli użyjesz tego operatora przed wywołaniem funkcji , która jest nieosiągalna lub ma literówkę w nazwie , skrypt przerwie pracę nie powiadamiając dlaczego .