The purpose of the RFC is to discuss about the return type hint utility on PHP.
<?php function scalar abc($x = NULL) { return $x; } var_dump(abc(1)); // int(1) var_dump(abc(1.)); // float(1) var_dump(abc()); /* PHP Catchable fatal error: The returned value must be of the type scalar, called in ... on line 9 and returning in ... on line 4 */
<?php class Bar { } class Foo extends Bar { public function Bar test($x) { return $x; } } $foo = new Foo; $foo->test($foo); // ok $foo->test(new stdClass); // fail /* PHP Catchable fatal error: The returned value should be instance of Bar, called in ... on line 13 and returning in ... on line 7 */
<?php interface ITest { function string bar(); } class Foo implements ITest { public function int bar() { } } // PHP Fatal error: Declaration of Foo::bar() must be compatible with that of ITest::bar() in ... on line 7
<?php namespace foo { class foo { } class bar extends foo { } } namespace bar { class bar { public function \foo\foo test() { return new \foo\bar; } } $bar = new bar; $bar->test(); // ok }
<?php interface Test { } class foo implements Test { function Test test() { return new foo; } } $func = new ReflectionMethod('foo::test'); var_dump($func->getReturnTypeHint()); // "Test" var_dump($func->returnsObject()); // true
<?php function scalar abc($x = NULL) { return $x; } $func = new ReflectionFunction('abc'); var_dump($func->getReturnTypeHint()); // scalar var_dump($func->returnsScalar()); // true
<?php class foo { function self bar() { return new foo; } } $func = new ReflectionMethod('foo::bar'); var_dump($func->getReturnTypeHint()); // foo var_dump($func->returnsObject()); // true