__toString() から例外をスローできないのはなぜですか? 質問する

__toString() から例外をスローできないのはなぜですか? 質問する

__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()

おすすめ記事