<?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=