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

 ID:                 55475
 Comment by:         alan at akbkhome dot com
 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:

>From the manual.

"Returns TRUE if the object is of this class or has this class as one of its 
parents, FALSE otherwise."

note the "FALSE otherwise" ...

Defiantly a bug..


Previous Comments:
------------------------------------------------------------------------
[2011-08-23 05:17:52] mads at gartneriet dot dk

DB_DataObject uses is_a() to check if a variable is both an object and an 
instance of a particular object.
PEAR::isError() does too.

This just gives warnings in my code, and I could of course easily fix these two 
places in my local pear-code. But then it will bite me the next time I upgrade 
those packages from PEAR.

------------------------------------------------------------------------
[2011-08-22 21:46:19] col...@php.net

What code? Do you have some example?

------------------------------------------------------------------------
[2011-08-22 19:17:28] mads at gartneriet dot dk

Maybe not a bug, but it is behaving different ind 5.3.7 than in the previous 
versions, which makes some of the code from PEAR that i use, give errors.

------------------------------------------------------------------------
[2011-08-22 18:36:59] s...@php.net

This is not a bug. If first argument is a string, it is interpreted as a class 
name and autoloader is called for it. Actually, IIRC, one the reasons why is_a 
was 
un-deprecated is that it can work with strings.

------------------------------------------------------------------------
[2011-08-22 15:46:05] johan...@php.net

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)

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


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