PHP tek bir hata denetim işlecini destekler: kuyruklu a imi (@). PHP'de bir deyimin başına getirildiğinde, bu deyimin üreteceği olası hata iletileri yok sayılır.
set_error_handler() ile özel bir hata işleyici işlev tanımlarsanız, hala çağrılmasına rağmen bu özel hata işleyicinin error_reporting() işlevini (hatayı tetikleyen çağrı @ ile öncelenmişse 0 döndürür) çağırması gerekir.
Eğer track_errors özelliği etkinse bu deyimin ürettiği hata iletileri $php_errormsg değişkenine kaydedilir. Her hata oluşunda yeni hata eskisinin yerini alacağından bu değişkene yeterli sıklıkta bakmanız gerekir.
<?php
/* Kasıtlı dosya hatası */
$dosyam = @file ('var_olmayan_dosya') or
die ("Dosya açılamadı: hata '$php_errormsg' değişkeninde kayıtlı");
// İfadelerle çalışır ama işlevlerle çalışmaz:
$değer = @$cache[$key];
// $key indisi mevcut değilse bir uyarı çıktılanır.
?>
Bilginize: Kuyruklu a işleci sadece ifadelerin başında kullanıldığında çalışır. Kısaca: Bir değer elde edebildiğiniz herşeyin başına @ getirebilirsiniz. Örneğin, değişkenlerin işlev veya include çağrılarının, sabitlerin ve benzerlerinin başına @ getirebilirsiniz. Ama işlev veya sınıf tanımlarının veya if ve foreach gibi denetim yapılarının başına @ koyamazsınız.
Ayrıca, error_reporting() işlevine ve Hata İşleme ve Günce Kayıt İşlevleri bölümüne bakınız.
Şu an @ hata denetim işleci, betiğin çalışmasını sonlandıracak önemli hataların raporlanmasını bile iptal edebilmektedir. Bu bakımdan, işleci örneğin bir işlevden kaynaklanabilecek hataları bastırmak için kullanıyorsanız, işlev tanımında yaptığınız yazım hataları veya işlevin yokluğu halinde ne olup bittiğini anlamadan betiğiniz sonlanıverebilir.