Hi,

On Fri, 2008-12-19 at 09:18 +0000, zoe wrote:
> Hi Lukas, Johannes
> 
> Please could I ask for a PHP5.3 release manager's point of view on this? 
> I raised this ext/imap bug yesterday 
> http://bugs.php.net/bug.php?id=46902 after a discussion with Ilia 
> because I noticed that all of the function return values which result 
> from a failure of parameter parsing had changed from 'false' in PHP5.2 
> to NULL in PHP5.3.

> 1) Is the accepted practice that functions will return NULL when 
> zend_parse_parameters() fails in PHP5.3?

    "If the parameters given to a function are not what it expects, such
    as passing an array where a string is expected, the return value of
    the function is undefined. In this case it will likely return NULL
    but this is just a convention, and cannot be relied upon."
    http://www.php.net/manual/en/functions.internal.php

> 2) Is it acceptable to change the behaviour of functions between 5.2 and 
> 5.3?

In most cases a wrong parameter parsing should happen during development
not in production so there shouldn't be a too big impact for productive
systems. But I know people doing strange things. Since null == false in
most situations the change from false to NULL shouldn't be noticed.
Changing the return value might even help to make PHP more consistent
and follow the docs (as above). But ...

> 3) Does this apply to *all*  PHP functions?

... there might be exceptions. Some functions, like strpos(), might
return 0 as a successful value and false for errors. So people check
using strpos !== false which won't catch all errors when returning NULL.
The interesting part there is that strpos() follows the "return NULL on
param parsing error"-rule in 5.2 already. So in that case changing the
return value the other way round might make the code more robust ;-)

The same goes, btw. for fgets - string(1) "0" might be a valid return
value, so people might check using === false for a general error, but
5.2 returns NULL for wrong parameter parsing.

> 4) Assuming that the answer (3) is no, is there any documentation about 
> which functions have changed? (If not would you like some?)

>From top of my head I don't see another function where this is relevant.
And in my opinion somebody who depends on wrong parameter parsing does
things wrong. If then checking for false using === the user also depends
on not strictly defined behavior (see quote from above again)

But I'd like others to think about edge cases like strpos(),
fgets(), ... where a value evaluating to false is a successful return
value or other related edge cases .. (is there any place where one uses
wrong parameters on purpose?)

johannes



-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to