Re: Coercive Scalar Type Hints RFC
| From: | Niktia Nefedov | Date: | Wed, 25 Feb 2015 14:23:49 +0000 |
| Subject: | Re: Coercive Scalar Type Hints RFC | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-83798@lists.php.net to get a copy of this message | ||
On Wed, 25 Feb 2015 17:54:21 +0400, Dmitry Stogov <dmitry@zend.com> wrote:
The object on the call-site should remain to be an object (if it's not passed by reference), however the called function will receive a string. It works in PHP-5 and PHP-7. Nothing should be changed. $ sapi/cli/php -r 'class X {function __toString(){return "abc";}} $x=new X; var_dump(strlen($x)); var_dump($x);' int(3) object(X)#1 (0) { } However, declare(strict_types=1) will break this. see https://github.com/ircmaxell/php-src/compare/scalar_type_hints_v5#diff-ef5bf53d1412b50f85d125ca4fe84741R1182 Thanks. Dmitry.Dmitry, I was talking about passing an object to a function, expecting a reference of a string: 'class X { function __toString() { return spl_object_hash($this); } } $x = new X; function foo(string &$x){} foo($x); var_dump($x);' Now what would this produce in Coercive STH is still an open question I guess as there is no implementation yet.