ID:               44021
 Updated by:       [EMAIL PROTECTED]
 Reported By:      rpanning at hotmail dot com
-Status:           Open
+Status:           Feedback
 Bug Type:         Class/Object related
 Operating System: Windows XP SP2
 PHP Version:      5.3CVS-2008-02-02 (snap)
 New Comment:

<?php
namespace NS;

class ParentClass {}
class ChildClass extends ParentClass {}

if (is_subclass_of('NS::ChildClass', 'NS::ParentClass')) {
        print 'Yes';
} else {
        print 'No';
}
?>

Does the above code work for you?  If yes, please close this bug as
bogus.

Automatic prefixing only occurs with absolute classnames, not compiled
variables.  Imagine, for instance this code:

<?php
namespace Foo;
function testsit($cl)
{
    return is_subclass_of($cl, 'ParentClass');
}
?>

Now, if one calls this code from this file:

<?php
namespace Blah;
var_dump(testsit('ChildClass'));
?>

should it look for Blah::ChildClass, Foo::ChildClass, or ::ChildClass? 
There is no deterministic way to answer this question.  Therefore fully
qualified classnames must be used for anything that isn't a T_STRING.


Previous Comments:
------------------------------------------------------------------------

[2008-02-02 02:01:37] rpanning at hotmail dot com

Description:
------------
The is_subclass_of() function does not accept classes in namespaces. A
warning is generated and the statement results as FALSE.

Also, in the example, if the namespace definition is removed it works.

Reproduce code:
---------------
namespace NS;

class ParentClass {}
class ChildClass extends ParentClass {}

if (is_subclass_of('ChildClass', 'ParentClass')) {
        print 'Yes';
} else {
        print 'No';
}


Expected result:
----------------
Yes

Actual result:
--------------
Warning: Unknown class passed as parameter in C:\test.php on line 7
No


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


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

Reply via email to