Edit report at https://bugs.php.net/bug.php?id=55475&edit=1

 ID:                 55475
 Updated by:         johan...@php.net
 Reported by:        mads at gartneriet dot dk
 Summary:            is_a() triggers autoloader
 Status:             Assigned
 Type:               Bug
 Package:            Scripting Engine problem
 PHP Version:        5.3.7
 Assigned To:        dmitry
 Block user comment: N
 Private report:     N

 New Comment:

is_a()'s first argument is documented to be an object. If called with a string, 
following the documentation, I would actually expect a "Warning: is_a() expects 
parameter 1 to be object, string given" and return NULL.

That aside and looking at the actual behavior: Previously is_a() could be used 
to check whether the parameter is an object AND of a specific type in one go. 
This can't be done anymore. In $a = "test"; is_a($a, "foo"); test might be an 
existing class and might be of type foo. Now people have to do is_object() && 
is_a().

I don't like having such behavior change in bug fix versions as I don't like 
going back and forth which is annoying for documentation and confusing for 
users. I would love to keep it out of 5.3.8 to have that as low risk quick 
release for the hash issue. Which means a rollback to the old way is even 
harder to do. (two versions with the new behavior out)


Previous Comments:
------------------------------------------------------------------------
[2011-08-22 14:49:31] col...@php.net

Well, we have 3 options here:

1) keep it like it is since 5.3.7
2) reverting it to how it worked before 5.3.7
3) change it even more to not use autoload, so that it neither works like 
<5.3.6 nor 5.3.7

Apparently through your proposed fix you're advocating for (3). If so, I can't 
see how it would improve the situation in 
any way.

Personally, given that the BC change is minimal, and that we're only adding 
functionality, (1) seems fine.
Correct code existing before 5.3.6 will work just fine anyway.

------------------------------------------------------------------------
[2011-08-22 14:44:18] ka...@php.net

... the behaviour I'm talking about is obvious the return value and the fact 
that the autoloader now is called.

------------------------------------------------------------------------
[2011-08-22 14:40:46] ka...@php.net

I'm talking about the usual procedure we have about changing behaviour, a 
function suddenly returns the oppersite of what it used to in the middle of a 
stable series is very unlike to do, even for PHP.

I knnow it went from not working to working, but I don't on the fact that such 
a commonly used function will change behaviour like that. What we should do is 
to make a big fat warning in the migration guide for 5.3.x -> 5.4.x about it, 
and in the manual.

It would be the same if we changed substr() to be case insensitive in the 
middle of a release series, lets just not venture in such dark corners.

------------------------------------------------------------------------
[2011-08-22 14:27:31] col...@php.net

But what BC break are you talking about exactly?

It went from not-working (returning always false for strings as first argument) 
to working with autoload.

------------------------------------------------------------------------
[2011-08-22 13:41:16] ka...@php.net

I'm not arguing that the new behaviour is wrong, I believe it is the desired 
too but I don't agree to break BC in the middle of a stable release series nor 
as much as I would like to myself to achieve the right behaviour.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=55475


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=55475&edit=1

Reply via email to