Re: [RFC] Scalar Type Hinting With Casts (re-opening)
| From: | Jocelyn Fournier | Date: | Sun, 13 Jul 2014 15:35:47 +0000 |
| Subject: | Re: [RFC] Scalar Type Hinting With Casts (re-opening) | ||
| References: | 1 2 3 4 5 6 7 8 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-75418@lists.php.net to get a copy of this message | ||
Le 13/07/2014 17:17, Rowan Collins a écrit :
On 13/07/2014 15:59, Jocelyn Fournier wrote:Yes, but if you add a E_NOTICE / E_STRICT warning with this cast, you'll be aware something wrong could happen with this code, and you'd better explicit cast your variable.From my point of view, if the type annotations are doing implicit cast (with or without E_NOTICE/E_STRICT warning), they should behave exactly the same than an explicit cast. If it behaves differently, I'll be really difficult for a developer to guess what will be the PHP behaviour with this new syntax.The problem is, in PHP an explicit type cast never fails - (int)'abc' simply gives you the value 0, not an error.
If you let scalar typehints just generate unchecked casts, we'd have this: wants_object(object $foo) { var_dump($foo); } wants_int(int $foo) { var_dump($foo); } wants_object('abc'); // fails with E_RECOVERABLE_ERROR wants_int('abc'); // succeeds and prints int(0)Actually it would be wants_object('abc'); // fails with E_RECOVERABLE_ERROR wants_int('abc'); // succeeds and prints int(0) + E_NOTICE / E_STRICT warning
That seems both inconsistent and less useful than a hybrid juggling + validation approach.Than means you find currently inconsistant than $foo = (int) 'abc'; works but not $bar = (object) 'abc'; ? :) Jocelyn