mirror of
https://github.com/php/php-src.git
synced 2026-03-30 04:02:19 +02:00
RFC: https://wiki.php.net/rfc/tostring_exceptions And convert some object to string conversion related recoverable fatal errors into Error exceptions. Improve exception safety of internal code performing string conversions.
72 lines
898 B
PHP
72 lines
898 B
PHP
--TEST--
|
|
Bug #26166 (__toString() crash when no values returned)
|
|
--FILE--
|
|
<?php
|
|
|
|
class Foo
|
|
{
|
|
function __toString()
|
|
{
|
|
return "Hello World!\n";
|
|
}
|
|
}
|
|
|
|
class Bar
|
|
{
|
|
private $obj;
|
|
|
|
function __construct()
|
|
{
|
|
$this->obj = new Foo();
|
|
}
|
|
|
|
function __toString()
|
|
{
|
|
return $this->obj->__toString();
|
|
}
|
|
}
|
|
|
|
$o = new Bar;
|
|
echo $o;
|
|
|
|
echo "===NONE===\n";
|
|
|
|
class NoneTest
|
|
{
|
|
function __toString() {
|
|
}
|
|
}
|
|
|
|
$o = new NoneTest;
|
|
try {
|
|
echo $o;
|
|
} catch (Error $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
echo "===THROW===\n";
|
|
|
|
class ErrorTest
|
|
{
|
|
function __toString() {
|
|
throw new Exception("This is an error!");
|
|
}
|
|
}
|
|
|
|
$o = new ErrorTest;
|
|
try {
|
|
echo $o;
|
|
} catch (Exception $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
?>
|
|
===DONE===
|
|
--EXPECT--
|
|
Hello World!
|
|
===NONE===
|
|
Method NoneTest::__toString() must return a string value
|
|
===THROW===
|
|
This is an error!
|
|
===DONE===
|