__toString() から例外をスローできないのはなぜですか?
class a
{
public function __toString()
{
throw new Exception();
}
}
$a = new a();
echo $a;
上記のコードを実行すると次の結果が生成されます。
Fatal error: Method a::__toString() must not throw an exception in /var/www/localhost/htdocs/index.php on line 12
私は指摘されたhttp://php.net/manual/en/migration52.incompatible.phpこの動作はどこで説明されていますか? なぜですか? そうする理由はありますか?
ここにこれを知っている人はいるでしょうか?
バグ トラッカー php-dev-team では、いつものように何も言わず、マニュアルを参照してください。バグ報告
ベストアンサー1
何度か検索した後、次のような記述を見つけました。
ヨハネスはこう説明した。文字列へのキャスト中にスローされた例外がZend Engineによって正しく処理されることを保証する方法はありません。、そしてエンジンの大部分が書き直されない限り、この状況は変わらないだろう、と彼は述べた。彼は、過去にもこのような問題について議論があったと付け加え、Guilherme 氏にアーカイブを確認するよう提案した。
のヨハネス上記で参照されているのは PHP 5.3 リリース マネージャーなので、PHP がこのように動作する理由については、これがおそらく最も「公式な」説明であると考えられます。
このセクションでは次のように述べられています。
__toString()
奇妙なことに、受け入れるだろうトリガーエラー()。
したがって、 内のエラー報告に関してはすべてが失われるわけではありません__toString()
。