#42009 [Opn->Csd]: is_subclass_of: behaviour contradicts is_a.phpt testcase description

From: Date: Mon, 03 Dec 2007 16:29:12 +0000
Subject: #42009 [Opn->Csd]: is_subclass_of: behaviour contradicts is_a.phpt testcase description
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-120333@lists.php.net to get a copy of this message
ID: 42009 Updated by: dmitry@php.net Reported By: robin_fernandes at uk dot ibm dot com -Status: Open +Status: Closed Bug Type: Scripting Engine problem Operating System: * PHP Version: PHP 5.3.0-dev (cli) (built: Nov 27 2007 16:18:57) Assigned To: dmitry New Comment: is_subclass_of() doesn't call __autoload() in case if first atgument is an object. Because if it's an object its class ,all parent classes and implemented interfaces are already loaded. In case if first arguments is string, PHP will call __autoload() for it. This is not a bug but expected behavior. Previous Comments: ------------------------------------------------------------------------ [2007-12-03 15:46:44] robin_fernandes at uk dot ibm dot com 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) ------------------------------------------------------------------------ [2007-08-22 13:24:03] dmitry@php.net 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] jani@php.net 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

« previous php.bugs (#120333) next »