Hata Denetim İşleçleri

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 engellenir.

set_error_handler() ile özel bir hata işleyici işlevi ayarlanırsa, tanılama bastırılmış olsa bile, özel hata işleyici error_reporting() işlevini çağırmalı ve aşağıdaki şekilde kullanılan @ işlecini doğrulamalıdır:

<?php
function my_error_handler($err_no$err_msg$filename$linenum) {
    if (!(
error_reporting() & $err_no)) {
        return 
false// Sustu
    
}
    
// ...
}
?>

Uyarı

PHP 8.0.0'dan önce, özel hata işleyicisine aktarılan önem derecesi değeri, tanılama bastırıldıysa her zaman 0 idi. Bu artık PHP 8.0.0'dan itibaren geçerli değildir.

İfade tarafından üretilenhata iletisi, get_error_last() işlevinden dönen dizinin "message" elemanında bulunur. Bu işlevin sonucu her hatada değişir, bu bakımdan sonuca yeterince kısa sürede bakmak gerekir.

<?php
/* Kasıtlı dosya hatası */
$dosyam = @file ('var_olmayan_dosya') or
    die (
"Dosya açılamadı: hata '" get_error_last()['message'] . "'");

// İ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 edilebilen herşeyin başına @ getirilebilir. Örneğin, değişkenlerin işlev veya include çağrılarının, sabitlerin ve benzerlerinin başına @ getirilebilir. Ama işlev veya sınıf tanımlarının veya if ve foreach gibi denetim yapılarının başına @ konamaz.

Uyarı

PHP 8.0.0 öncesinde, @ hata denetim işleci ile betiğin çalışmasını sonlandıracak önemli hataların raporlanmasını iptal etmek mümkündü. Bu bakımdan, işleç örneğin bir işlevden kaynaklanabilecek hataları bastırmak için kullanılıyorsa, işlev tanımında yapılan yazım hataları nedeniyle veya işlevin yokluğu halinde, ne olup bittiği anlaşılamadan betik sonlanabiliyordu.