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