<?php
class StringCastable
{
private $data;
public function __constructor(string $data)
{
$this->data = $data;
}
public function __toString(): string
{
return $this->toString();
}
public function toString(): string
{
return $this->data;
}
}
function testStringCast(string $data)
{
var_dump($data, get_class($data));
}
$speculoos = new StringCastable("speculoos");
var_dump($speculoos);
testStringCast($speculoos);
object(StringCastable)#1 (1) {
["data":"StringCastable":private]=>
NULL
}
Fatal error: Uncaught TypeError: StringCastable::toString(): Return value must be of type string, null returned in /in/PODQY:19
Stack trace:
#0 /in/PODQY(14): StringCastable->toString()
#1 /in/PODQY(23): StringCastable->__toString()
#2 /in/PODQY(32): testStringCast(Object(StringCastable))
#3 {main}
thrown in /in/PODQY on line 19
Process exited with code 255.
Output for 7.4.0 - 7.4.33
object(StringCastable)#1 (1) {
["data":"StringCastable":private]=>
NULL
}
Fatal error: Uncaught TypeError: Return value of StringCastable::toString() must be of the type string, null returned in /in/PODQY:19
Stack trace:
#0 /in/PODQY(14): StringCastable->toString()
#1 /in/PODQY(23): StringCastable->__toString()
#2 /in/PODQY(32): testStringCast(Object(StringCastable))
#3 {main}
thrown in /in/PODQY on line 19
Process exited with code 255.
object(StringCastable)#1 (1) {
["data":"StringCastable":private]=>
NULL
}
Fatal error: Method StringCastable::__toString() must not throw an exception, caught TypeError: Return value of StringCastable::toString() must be of the type string, null returned in /in/PODQY on line 0
Process exited with code 255.
Output for 7.0.0
object(StringCastable)#1 (1) {
["data":"StringCastable":private]=>
NULL
}
Fatal error: Method StringCastable::__toString() must not throw an exception in /in/PODQY on line 0
Process exited with code 255.