Neden) (toString __ den istisna imkansız?

3 Cevap php

Neden) (toString __ den istisna imkansız?

class a
{
    public function __toString()
    {
        throw new Exception();
    }
}

$a = new a();
echo $a;

Yukarıdaki kod bu üretir:

Fatal error: Method a::__toString() must not throw an exception in /var/www/localhost/htdocs/index.php on line 12

I http://php.net/manual/en/migration52.incompatible.php Bu davranış tarif edildiği yerde işaret, ama neden oldu? Bunu yapmak için herhangi bir neden?

Burada herkes bunu biliyor olabilir?

http://bugs.php.net/50699: Her zamanki gibi bug tracker php-dev-ekip manuel görmek ama bir şey diyor

3 Cevap

Birkaç arama sonra diyor ki, this bulundu:

Johannes Engine büyük parçalar yeniden yazılır sürece bu değişmeyecek there is no way to ensure that an exception thrown during a cast to string would be handled correctly by the Zend Engine bunu, ve bunu açıkladı. O geçmişte bu tür konular hakkında tartışmalar olmuştur sözlerine ekledi ve Guilherme arşivleri kontrol önerdi.

Johannes yukarıda başvurulan PHP 5.3 Release Manager, yani "resmi" olarak muhtemelen PHP bu şekilde davranır neden olarak bulabileceğiniz gibi bir açıklama.

Bölüm söz ediyor:

__toString(), garip, kabul edecek trigger_error().

Yani tüm __toString() içinde raporlama hata açısından kaybolur.

Bence __toString hackish ve bu nedenle tipik yığın dışında var olacaktır. Atılan bir istisna, sonra, nereye gitmek bilmiyorum.

Ben bu kararın gerekçesi bugüne kadar kamuoyuna olmuştur sanmıyorum. Bazı iç mimari sınırlama gibi görünüyor.

Daha soyut bir düzeyde, bu tür mantıklı. Bir nesne kendisinin bir dize temsilini, başarısız eylem bu tür için hiçbir neden geri dönmek gerekir.