Re: [RFC] Scalar Type Hinting With Casts (re-opening)

From: 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:
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.
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.
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

« previous php.internals (#75418) next »