2011-08-13 15 views
5

Normal olarak php betiği E_NOTICE'dan sonra çalışmaya devam ediyor, bir fonksiyon bağlamında bunu önemli bir hataya yükseltmenin bir yolu var, bu sadece benim fonksiyonumda yalnızca temel işlevlerimde değil, yalnızca çekirdek php işlevlerinde bildirimde bulunmam gerekiyor .E_NOTICE'da php çıkışı nasıl yapılır?

+3

Neden kendi işlevlerinizle kısıtlamanız gerekiyor? Bir çekirdek işlevi bir E_NOTICE atarsa, bu genellikle yanlış kullandığınız anlamına gelir (kendi işlevinizde). Bu yüzden tüm E_NOTICE'ları yakalamak isteyeceğinizi düşünüyorum. 'Trigger_error' kullanarak kendiniz bir uyarıyı kendiniz tetiklemezseniz, bu durumda ayırt etmek kolay bir E_USER_NOTICE sürümünü tetiklemeniz gerekir. – deceze

+1

Öncelikle E_NOTICE'da fonksiyonumdan çıkış yapmayı düşündüm, en azından bazıları. E_USER_NOTICE için istisnalar yazmanın anlamsız olduğunu düşünüyorum çünkü bu durumda herhangi bir programcının amacı bu bildirimi gerçekten işe koyup yürütmeye devam etmektir. – rsk82

+1

"Sadece işlevlerimde bildirimler" [Tetikleyici] (http://il2.php.net/manual/en/function.trigger-error.php) bunları kendiniz yapmak istediğiniz anlamına mı geliyor? ya da işlevlerinizdeki normal "çekirdek" E_NOTICE'lar? –

cevap

9

E_NOTICE ürününü yakalamak için özel bir hata işleyicisi oluşturabilirsiniz.

Bu denenmemiş ama doğru yöne gitmeli: o zaman

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 

} 

, onu terk ederken işlevini girme ve PHP'nin hata işleyicisi geri yüklediğinizde set_error_handler() kullanarak yeni özel hata işleyicisi olarak ayarlamak:

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); 

} 
+1

"Bu yalnızca işlevlerimde bildirimde çıkmak için gereklidir, ancak çekirdek php işlevlerinde değil, global olarak" –

+1

@Rikudo Yukarıdakilerin tam olarak yaptığı şey bu değil mi? Ne eksik? –

+1

O bir php çekirdek E_NOTICE üzerinde ölmek istemiyor ama sadece onun işlevleri tarafından tetiklenen bir E_USER_NOTICE :) –

2

kullanarak özel bir hata işleyicisi kullanmak 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."; 


?> 

Working Example

İlgili konular