<?php 
 
class  A { 
    public  function  test( )  { 
        echo  self :: who ( ) ;    // always class A 
        echo  static:: who ( ) ;  // always the current class (static context) 
        echo  $this -> who ( ) ;   // always the current class (object context) 
    } 
    public  function  who( )  { 
        echo  __CLASS__  .  "\n " ; 
    } 
} 
 
class  B extends  A { 
    public  function  who( )  { 
        echo  __CLASS__  .  "\n " ; 
    } 
} 
 
class  C extends  B { 
    public  function  who( )  { 
        echo  __CLASS__  .  "\n " ; 
    } 
} 
 
( new  B) -> test ( ) ; 
( new  C) -> test ( ) ; 
C:: test ( ) ; 
 
PD9waHAKCmNsYXNzIEEgewogICAgcHVibGljIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAgZWNobyBzZWxmOjp3aG8oKTsgICAvLyBhbHdheXMgY2xhc3MgQQogICAgICAgIGVjaG8gc3RhdGljOjp3aG8oKTsgLy8gYWx3YXlzIHRoZSBjdXJyZW50IGNsYXNzIChzdGF0aWMgY29udGV4dCkKICAgICAgICBlY2hvICR0aGlzLT53aG8oKTsgIC8vIGFsd2F5cyB0aGUgY3VycmVudCBjbGFzcyAob2JqZWN0IGNvbnRleHQpCiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gd2hvKCkgewogICAgICAgIGVjaG8gX19DTEFTU19fIC4gIlxuIjsKICAgIH0KfQoKY2xhc3MgQiBleHRlbmRzIEEgewogICAgcHVibGljIGZ1bmN0aW9uIHdobygpIHsKICAgICAgICBlY2hvIF9fQ0xBU1NfXyAuICJcbiI7CiAgICB9Cn0KCmNsYXNzIEMgZXh0ZW5kcyBCIHsKICAgIHB1YmxpYyBmdW5jdGlvbiB3aG8oKSB7CiAgICAgICAgZWNobyBfX0NMQVNTX18gLiAiXG4iOwogICAgfQp9CgoobmV3IEIpLT50ZXN0KCk7CihuZXcgQyktPnRlc3QoKTsKQzo6dGVzdCgpOwo=