<?php
class A {
public static $foo = null;
public static 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 static function getClass() { return __CLASS__; }
}
class C extends A {
public static function getClass() { return __CLASS__; }
}
B::printFoo();
C::printFoo();
A::printFoo();
PD9waHAKY2xhc3MgQSB7CiAgcHVibGljIHN0YXRpYyAkZm9vID0gbnVsbDsKCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDbGFzcygpIHsgcmV0dXJuIF9fQ0xBU1NfXzsgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJpbnRGb28oKSB7CiAgICAgIHN0YXRpYzo6Z3Vlc3NGb28oKTsKICAgICAgcHJpbnQgIkNsYXNzOiAiIC4gc3RhdGljOjpnZXRDbGFzcygpIC4gJyBzYXlzOiAnOwogICAgICBwcmludCBzdGF0aWM6OiRmb28gLiAiXG4iOwogICAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGd1ZXNzRm9vKCkgewogICAgaWYoIXN0YXRpYzo6JGZvbykgewogICAgICBzdGF0aWM6OiRmb28gPSAnIEkgYW0gJyAuIHN0YXRpYzo6Z2V0Q2xhc3MoKTsKICAgIH0KICB9Cn0KCmNsYXNzIEIgZXh0ZW5kcyBBIHsKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENsYXNzKCkgeyByZXR1cm4gX19DTEFTU19fOyB9Cn0KCmNsYXNzIEMgZXh0ZW5kcyBBIHsKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENsYXNzKCkgeyByZXR1cm4gX19DTEFTU19fOyB9Cn0KCkI6OnByaW50Rm9vKCk7CkM6OnByaW50Rm9vKCk7CkE6OnByaW50Rm9vKCk7CgoK