PHP bir ölümcül hatayı göz ardı etmek mümkün değildir?

4 Cevap php

Ben terimi 'ölümcül hata' önemini anlamak, ancak ben (aşırı basitleştirilmiş) böyle bir test sınıfı yazmak istiyorum:

class tester {

    function execute() {

    	if( @$this->tryit() === true ) return true;
    	return false;

    }

    function tryit() {

    	$doesntexist = new noobject();
    	return true;

    }

}

aslında ben bir Test üst sınıfı olurdu, ve daha sonra sınıfları genişletmek ve testler bir grup ile yöntemlerden bir sürü içerecektir. Üst sınıf execute tanımlamak ve sadece (execute elbette hariç) ve geçiş ve hangi başarısız işlevleri hangi veri toplama çocuk sınıfta her yöntemi çalışır.

Ben aslında benim kod parçası yazmak önce testleri yazmak istiyorum, ama kullanmak yerine assert Ben sadece every testini çalıştırmak ve test sınıfları başarısız fonksiyonları hakkında hangi bir listesini oluşturmak istiyorum . Ancak tüm komut ölmek zorunda değil iken ben de, bunu yapmak mümkün mü ben, vb sınıfını tanımlamak için unuttum örnekleri işlemek istiyorum - Ama bu bir test başarısız olursa bir hata olduğunu anlamındadır?

Ben komut sadece önünde @ ile işlev çağrısı kadar başarısız, ve sonra devam edeceğini düşünüyordum, ama yanılmışım. Bir çözüm var mı?

4 Cevap

Önemli bir hata fatal, ve bu konuda yapabileceği bir şey yok.

Çözümlerinin iki fikir olabilir:

Aslında, ikinci çözüm PHPUnit var sürüm 3.4 beri, eğer doğru hatırlıyorsam ;-)

Ölümcül hataları bile set_error_handler ile durdurulamaz. Ancak, çoğu zaman daha kod yazma pahasına başka bir yol bulabilirsiniz. Örnek yöntemi için tryit, {sen bir istisna atar ölümcül olmayan bir hata veya (PHP 5.3.0 ') tetikleyen bir autoload fonksiyonu yazmak, ya da kullanabilirsiniz [(3) }] var olmayan bir sınıfın örnekleme atlamak için.

Ben bir hata bildirmek için test sınıfa çağırır set_error_handler() fonksiyonu ile bir hata işleyicisi kuracağını tahmin ediyorum, ama bunu uygulamak istiyorum tam olarak nasıl tamamen emin değilim.

Yes and No

Bu ölümcül sonra, bıraktığı yerden kod alır böylece yazamam. Ancak, ölümcül hata sonra işleme php devam () register_shutdown_function kullanabilirsiniz.

Ben hangi tür ölümcül hata oldu ve daha sonra aynı sayfaya geri kullanıcı yönlendirme, ya da ölmeden önce bunu düzeltmek için girişimde denetler kod yazdık.

register_shutdown_function hata bilgi prevalued bir iletişim formu ile bir 500 hata sayfasına kullanıcı yönlendirme için mükemmel. Bu şekilde ben kullanıcılar benim github acct bir konuyu açarak bana yardımcı olabilir.