Re: [Zend Engine 2] Type hints revisited [IllegalArgumentException instead of E_ERROR]

From: Date: Sat, 29 Mar 2003 13:23:29 +0000
Subject: Re: [Zend Engine 2] Type hints revisited [IllegalArgumentException instead of E_ERROR]
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-459@lists.php.net to get a copy of this message
On Sat, 2003-03-29 at 13:10, Zeev Suraski wrote: [...] > >After reading through a bunch of mails this generated, I get the idea > >that most people here would be happier with an E_WARNING and the > >function not being executed. > > ?! > > How the heck can we even think about such a thing? When you call a > function, you expect it to run. The code that follows it may rely on stuff > that it has done. Not running it is simply not an option, I can't even > begin to imagine the possible consequences of such an approach! Well, at the moment, the function is not run either, isn't it? The program dies. To clarify: function foo(Bar $bar) { // [...] } is - with my patch - equivalent to: function foo($bar) { if (!($bar instanceof Bar)) { trigger_error('Argument 1 must be an instance of Bar', E_WARNING); return; } // [...] } and basically much nicer as a function containing - say - five or six arguments all needing to be checked in the "not-instance-of" manner. At the moment, it is: function foo($bar) { if (!($bar instanceof Bar)) { die('Argument 1 must be an instance of Bar'); } // [...] } That's all I changed. > Type hints are shortcuts for instanceof. If you want to handle a situation > where the function is passed the wrong arguments, don't use type hints, use > instanceof. Or use the errors-for-exceptions mode that we may have. I guess, as we can't find a consensus here, that is what has to be done. - Timm

« previous php.internals (#459) next »