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

 ID:               51544
 Comment by:       crrodriguez at opensuse dot org
 Reported by:      public at proside dot fr
 Summary:          instanceof for static calls
 Status:           Open
 Type:             Feature/Change Request
 Package:          Reflection related
 Operating System: Windows XP
 PHP Version:      5.3.2

 New Comment:

<?php



interface iTest { } 



class base {

  public static function create() {

    if (class_implements(get_called_class(),'iTest')) echo 'iTest';

  }

}



class child extends base implements iTest { } 



child::create();





Fixes your problem, this is not a PHP bug.


Previous Comments:
------------------------------------------------------------------------
[2010-04-12 22:37:39] public at proside dot fr

Description:
------------
Hy guys,



Here's a problem i faced today : i wanted to know if a base and derived
class having only static functions and using both late static binding
were an implementation of a specific interface. 

The problem was that the class base needed to know if its child
implemented a specific interface.

Not easy to explain, the code is easier for a better comprehension :





Test script:
---------------
<?php



interface iTest { }



class base {

  public static function create() {

    if (self instanceof iTest) echo 'iTest';

  }

}



class child extends base implements iTest { }



child::create();



?>

Expected result:
----------------
Normally the result should be 'iTest' because the class 'child'
implements iTest

Actual result:
--------------
Doesn't execute.



Here's the solution i found : i used the ReflectionCLass to emulate that
feature



<?php



interface iTest { }



class base {



  public static function create() {

    $r = new ReflectionClass(static::$SELF);

    if (in_array('iTest', $r->getInterfaceNames())) echo 'iTest';

  }     

}



class child extends base implements iTest {     

  protected static $SELF = __CLASS__;

}



child::create();



?>


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



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

Reply via email to