<?php
class Base {
private static
$cache = array();
public function &__get($name) {
if ($name != 'cache') {
// error handling
}
if (!isset(self::$cache[$type])) { self::$cache[$type] = array(); }
return self::$cache[$type];
}
}
class Derived extends Base {
}
$b = new Base;
$b2 = new Base;
$d = new Derived;
$b->cache['foo'] = 42;
echo $b->cache['foo']."\n"; // 42
echo $b2->cache['foo']."\n"; // also 42
echo $d->cache['foo']."\n"; // nothing (actually, undefined index); cache is per-class
PD9waHAKICAgIGNsYXNzIEJhc2UgewogICAgICAgIHByaXZhdGUgc3RhdGljICRjYWNoZSA9IGFycmF5KCk7CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiAmX19nZXQoJG5hbWUpIHsKICAgICAgICAgICAgaWYgKCRuYW1lICE9ICdjYWNoZScpIHsKICAgICAgICAgICAgICAgIC8vIGVycm9yIGhhbmRsaW5nCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0eXBlID0gZ2V0X2NsYXNzKCR0aGlzKTsKICAgICAgICAgICAgaWYgKCFpc3NldChzZWxmOjokY2FjaGVbJHR5cGVdKSkgewogICAgICAgICAgICAgICAgc2VsZjo6JGNhY2hlWyR0eXBlXSA9IGFycmF5KCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBzZWxmOjokY2FjaGVbJHR5cGVdOwogICAgICAgIH0KICAgIH0KCiAgICBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CiAgICB9CiAgICAKICAgICRiID0gbmV3IEJhc2U7CiAgICAkYjIgPSBuZXcgQmFzZTsKICAgICRkID0gbmV3IERlcml2ZWQ7CiAgICAkYi0+Y2FjaGVbJ2ZvbyddID0gNDI7CgogICAgZWNobyAkYi0+Y2FjaGVbJ2ZvbyddLiJcbiI7ICAvLyA0MgogICAgZWNobyAkYjItPmNhY2hlWydmb28nXS4iXG4iOyAvLyBhbHNvIDQyCiAgICBlY2hvICRkLT5jYWNoZVsnZm9vJ10uIlxuIjsgIC8vIG5vdGhpbmcgKGFjdHVhbGx5LCB1bmRlZmluZWQgaW5kZXgpOyBjYWNoZSBpcyBwZXItY2xhc3MK