ID: 42009
User updated by: robin_fernandes at uk dot ibm dot com
Reported By: robin_fernandes at uk dot ibm dot com
-Status: Closed
+Status: Open
Bug Type: Scripting Engine problem
Operating System: *
-PHP Version: 5CVS-2007-08-17
+PHP Version: PHP 5.3.0-dev (cli) (built: Nov 27 2007 16:18:57)
Assigned To: dmitry
New Comment:
This has been fixed for the second argument passed to is_subclass_of(),
but not the first.
The test below shows that is_subclass_of() still invokes __autoload()
for the first argument, contradicting the description (but not the
content) of test is_a.phpt. Note that if this is fixed, the expected
output for is_a.phpt will need to change.
---( Test case: )---
<?php
function __autoload($name) {
echo("AUTOLOAD '$name'\n");
}
Class Def {}
var_dump(is_subclass_of("Undef", "Def"));
?>
---( Expected output: )---
Warning: Unknown class passed as parameter in %s on line 6
bool(false)
---( Actual output: )---
AUTOLOAD 'Undef'
Warning: Unknown class passed as parameter in %s on line 6
bool(false)
Previous Comments:
------------------------------------------------------------------------
[2007-08-22 13:24:03] [EMAIL PROTECTED]
This bug has been fixed in CVS.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
------------------------------------------------------------------------
[2007-08-17 20:13:25] [EMAIL PROTECTED]
According to the commit log is_a() and is_subclass_of() should NOT call
__autoload, in the same way as "instanceof" operator.
But indeed the is_a.phpt does have check to see if __autoload was
called and expects it -> there's bug somewhere.
Dmitry, please check this out.
------------------------------------------------------------------------
[2007-07-16 15:02:50] robin_fernandes at uk dot ibm dot com
Description:
------------
This is either a minor mistake in a testcase description, or a bug in
is_subclass_of().
The description of testcase
http://lxr.php.net/source/ZendEngine2/tests/is_a.phpt states:
"is_a() and is_subclass_of() shouldn't call __autoload".
However, the expected output explicitly checks for __autoload() calls
*in some cases* (lines 49 and 50).
Either the testcase description (and perhaps documentation) should
clarify in which circumstances is_subclass_of() does result in an
invocation of __autoload(), or is_subclass_of() should be fixed.
Below is a simplified testcase illustrating a case where
is_subclass_of() does invoke __autoload().
Reproduce code:
---------------
<?php
function __autoload($name) {
echo("AUTOLOAD '$name'\n");
}
Class Def {}
var_dump(is_subclass_of("Def", "Undef"));
?>
Expected result:
----------------
bool(false)
Actual result:
--------------
AUTOLOAD 'Undef'
bool(false)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=42009&edit=1