読者です 読者をやめる 読者になる 読者になる

俺が生きている可能性は高い

人生ガンバローン

PHPでマジックメソッド __toString() 内で例外を投げるとfatalになる

php

学び: __toString()でexceptionをthrowするとfatalになる

php > print PHP_VERSION;
5.6.10
php > Class Foo { public function __toString() { throw new \RuntimeException(); }};
php > print (new Foo);
PHP Fatal error:  Method Foo::__toString() must not throw an exception in php shell code on line 0
PHP Stack trace:
PHP   1. {main}() php shell code:0

Fatal error: Method Foo::__toString() must not throw an exception in php shell code on line 0

Call Stack:
    7.3242     226288   1. {main}() php shell code:0

PHP7.0.3で検証しても同様だった

php > print PHP_VERSION;
7.0.3
php > Class Foo { public function __toString() { throw new \RuntimeException(); }};
php > print (new Foo);
PHP Fatal error:  Method Foo::__toString() must not throw an exception, caught RuntimeException:  in php shell code on line 0
PHP Stack trace:
PHP   1. {main}() php shell code:0

無名クラス使いたかっただけ

php > print PHP_VERSION;
7.0.3
php > print (new class { public function __toString(){ throw new RuntimeException(); }});
PHP Fatal error:  Method class@anonymous::__toString() must not throw an exception, caught RuntimeException:  in php shell code on line 0
PHP Stack trace:
PHP   1. {main}() php shell code:0

参考URL * http://qiita.com/Hiraku/items/195222c4f4f223e435fa * https://bugs.php.net/bug.php?id=53648