<?php
class A {
public static $foo = null;
public function getClass() { return __CLASS__; }
public static function printFoo() {
static::guessFoo();
print "Class: " . static::getClass() . ' says: ';
print static::$foo . "\n";
}
public static function guessFoo() {
if(!static::$foo) {
static::$foo = ' I am ' . static::getClass();
}
}
}
class B extends A {
public function getClass() { return __CLASS__; }
}
class C extends A {
public function getClass() { return __CLASS__; }
}
A::printFoo();
B::printFoo();
C::printFoo();
PD9waHAKY2xhc3MgQSB7CiAgcHVibGljIHN0YXRpYyAkZm9vID0gbnVsbDsKCiAgcHVibGljIGZ1bmN0aW9uIGdldENsYXNzKCkgeyByZXR1cm4gX19DTEFTU19fOyB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmludEZvbygpIHsKICAgICAgc3RhdGljOjpndWVzc0ZvbygpOwogICAgICBwcmludCAiQ2xhc3M6ICIgLiBzdGF0aWM6OmdldENsYXNzKCkgLiAnIHNheXM6ICc7CiAgICAgIHByaW50IHN0YXRpYzo6JGZvbyAuICJcbiI7CiAgICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ3Vlc3NGb28oKSB7CiAgICBpZighc3RhdGljOjokZm9vKSB7CiAgICAgIHN0YXRpYzo6JGZvbyA9ICcgSSBhbSAnIC4gc3RhdGljOjpnZXRDbGFzcygpOwogICAgfQogIH0KfQoKY2xhc3MgQiBleHRlbmRzIEEgewogIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGFzcygpIHsgcmV0dXJuIF9fQ0xBU1NfXzsgfQp9CgpjbGFzcyBDIGV4dGVuZHMgQSB7CiAgcHVibGljIGZ1bmN0aW9uIGdldENsYXNzKCkgeyByZXR1cm4gX19DTEFTU19fOyB9Cn0KCgpBOjpwcmludEZvbygpOwpCOjpwcmludEZvbygpOwpDOjpwcmludEZvbygpOwo=