<?php
class MyCache {
static $instance = null;
protected $status = 0;
private function __construct(){}
static function getInstance() {
self::$instance = new self();
}
return self::$instance;
}
function get($key) {
if (isset(self::$ary[$key]) && self::$ary[$key]['time'] > microtime(true)) { $this->status = 0;
return self::$ary[$key]['value'];
} else {
$this->status = 1;
return false;
}
}
function set($key, $value, $time) {
self::$ary[$key] = array( 'value' => $value,
);
}
function getOrUpdate($key, $time) {
$value = $this->get($key);
if (($value === false) && ($this->status != 0)) {
$params = $bt['args'];
$params[count($params)-1] = false; ($bt['type'] == '->') ? $bt['object'] : $bt['class'],
$bt['function']
)
: $bt['function'],
$params
);
$this->set($key, $value, $time);
}
return $value;
}
}
function globalLol($cache = false) {
if ($cache) {
return MyCache::getInstance()->getOrUpdate('lol', 0.5);
}
echo "# new lol\n";
}
class Pysch {
function instanceLol($cache = false) {
if ($cache) {
return MyCache::getInstance()->getOrUpdate('instance_lol', 0.5);
}
echo "# new instance lol\n";
}
static function staticLol($cache = false) {
if ($cache) {
return MyCache::getInstance()->getOrUpdate('static_lol', 0.5);
}
echo "# new static lol\n";
}
}
$pysch = new Pysch();
PD9waHAKCmNsYXNzIE15Q2FjaGUgewogICAgc3RhdGljICRpbnN0YW5jZSA9IG51bGw7CiAgICBzdGF0aWMgJGFyeSA9IGFycmF5KCk7CiAgICBwcm90ZWN0ZWQgJHN0YXR1cyA9IDA7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpe30KCiAgICBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKSB7CiAgICAgICAgaWYgKGlzX251bGwoc2VsZjo6JGluc3RhbmNlKSkgewogICAgICAgICAgICBzZWxmOjokaW5zdGFuY2UgPSBuZXcgc2VsZigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6JGluc3RhbmNlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldCgka2V5KSB7CiAgICAgICAgaWYgKGlzc2V0KHNlbGY6OiRhcnlbJGtleV0pICYmIHNlbGY6OiRhcnlbJGtleV1bJ3RpbWUnXSA+IG1pY3JvdGltZSh0cnVlKSkgewogICAgICAgICAgICAkdGhpcy0+c3RhdHVzID0gMDsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRhcnlbJGtleV1bJ3ZhbHVlJ107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnN0YXR1cyA9IDE7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2V0KCRrZXksICR2YWx1ZSwgJHRpbWUpIHsKICAgICAgICBzZWxmOjokYXJ5WyRrZXldID0gYXJyYXkoCiAgICAgICAgICAgICd2YWx1ZScgPT4gJHZhbHVlLAogICAgICAgICAgICAndGltZScgID0+ICR0aW1lICsgbWljcm90aW1lKHRydWUpLAogICAgICAgICk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0T3JVcGRhdGUoJGtleSwgJHRpbWUpIHsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Z2V0KCRrZXkpOwogICAgICAgIGlmICgoJHZhbHVlID09PSBmYWxzZSkgJiYgKCR0aGlzLT5zdGF0dXMgIT0gMCkpIHsKICAgICAgICAgICAgJGJ0ID0gZGVidWdfYmFja3RyYWNlKERFQlVHX0JBQ0tUUkFDRV9QUk9WSURFX09CSkVDVCwgMilbMV07CiAgICAgICAgICAgICRwYXJhbXMgPSAkYnRbJ2FyZ3MnXTsKICAgICAgICAgICAgJHBhcmFtc1tjb3VudCgkcGFyYW1zKS0xXSA9IGZhbHNlOwogICAgICAgICAgICAkdmFsdWUgPSBjYWxsX3VzZXJfZnVuY19hcnJheSgKICAgICAgICAgICAgICAgIGlzc2V0KCRidFsndHlwZSddKQogICAgICAgICAgICAgICAgICAgID8gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICgkYnRbJ3R5cGUnXSA9PSAnLT4nKSA/ICRidFsnb2JqZWN0J10gOiAkYnRbJ2NsYXNzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICRidFsnZnVuY3Rpb24nXQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICA6ICRidFsnZnVuY3Rpb24nXSwKICAgICAgICAgICAgICAgICRwYXJhbXMKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHRoaXMtPnNldCgka2V5LCAkdmFsdWUsICR0aW1lKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH0KfQoKCmZ1bmN0aW9uIGdsb2JhbExvbCgkY2FjaGUgPSBmYWxzZSkgewogICAgaWYgKCRjYWNoZSkgewogICAgICAgIHJldHVybiBNeUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5nZXRPclVwZGF0ZSgnbG9sJywgMC41KTsKICAgIH0KICAgIGVjaG8gIiMgbmV3IGxvbFxuIjsKICAgIHJldHVybiBtaWNyb3RpbWUoKTsKfQoKY2xhc3MgUHlzY2ggewogICAgZnVuY3Rpb24gaW5zdGFuY2VMb2woJGNhY2hlID0gZmFsc2UpIHsKICAgICAgICBpZiAoJGNhY2hlKSB7CiAgICAgICAgICAgIHJldHVybiBNeUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5nZXRPclVwZGF0ZSgnaW5zdGFuY2VfbG9sJywgMC41KTsKICAgICAgICB9CiAgICAgICAgZWNobyAiIyBuZXcgaW5zdGFuY2UgbG9sXG4iOwogICAgICAgIHJldHVybiBtaWNyb3RpbWUoKTsKICAgIH0KICAgIHN0YXRpYyBmdW5jdGlvbiBzdGF0aWNMb2woJGNhY2hlID0gZmFsc2UpIHsKICAgICAgICBpZiAoJGNhY2hlKSB7CiAgICAgICAgICAgIHJldHVybiBNeUNhY2hlOjpnZXRJbnN0YW5jZSgpLT5nZXRPclVwZGF0ZSgnc3RhdGljX2xvbCcsIDAuNSk7CiAgICAgICAgfQogICAgICAgIGVjaG8gIiMgbmV3IHN0YXRpYyBsb2xcbiI7CiAgICAgICAgcmV0dXJuIG1pY3JvdGltZSgpOwogICAgfQp9Cgp2YXJfZHVtcChnbG9iYWxMb2wodHJ1ZSkpOwp2YXJfZHVtcChnbG9iYWxMb2wodHJ1ZSkpOwpzbGVlcCgxKTsKdmFyX2R1bXAoZ2xvYmFsTG9sKHRydWUpKTsKdmFyX2R1bXAoZ2xvYmFsTG9sKHRydWUpKTsKCnZhcl9kdW1wKFB5c2NoOjpzdGF0aWNMb2wodHJ1ZSkpOwp2YXJfZHVtcChQeXNjaDo6c3RhdGljTG9sKHRydWUpKTsKc2xlZXAoMSk7CnZhcl9kdW1wKFB5c2NoOjpzdGF0aWNMb2wodHJ1ZSkpOwp2YXJfZHVtcChQeXNjaDo6c3RhdGljTG9sKHRydWUpKTsKCiRweXNjaCA9IG5ldyBQeXNjaCgpOwp2YXJfZHVtcCgkcHlzY2gtPmluc3RhbmNlTG9sKHRydWUpKTsKdmFyX2R1bXAoJHB5c2NoLT5pbnN0YW5jZUxvbCh0cnVlKSk7CnNsZWVwKDEpOwp2YXJfZHVtcCgkcHlzY2gtPmluc3RhbmNlTG9sKHRydWUpKTsKdmFyX2R1bXAoJHB5c2NoLT5pbnN0YW5jZUxvbCh0cnVlKSk7Cg==