<?php
class Registry {
public function get
($key){ return (isset($this->data[$key]) ?
$this->data[$key] : NULL); } public function set($key,$val){ $this->data[$key] = $val; }
public function has
($key) { return isset($this->data[$key]); } }
abstract class Controller {
protected $registry;
public function __construct($registry){ $this->registry = $registry; }
public function __get($key){ return $this->registry->get($key); }
public function __set($key,$value){ $this->registry->set($key, $value); }
public function __isset($key) { return $this->registry->has($key); }
}
class Applications {
private $registry;
public function __construct($Registry){ $this->registry = $Registry; }
public function __get($key){ return $this->registry->get($key); }
public function __set($key,$val){ return $this->registry->set($key,$val); }
// You should implement an __isset() method here
public function buildApplication(){
$this->application_page = 'current/page';
$application = new application($this->registry);
$application->index();
}
}
class Application extends Controller {
public function index(){
echo empty($this->application_page)?
'yes':'no'; //Returns Yes
$page = $this->application_page;
echo empty($page)?
'yes':'no'; //Returns No
}
}
$apps = new Applications(new Registry());
$apps->buildApplication();
PD9waHAKCmNsYXNzIFJlZ2lzdHJ5IHsKICBwcml2YXRlICRkYXRhID0gYXJyYXkoKTsKICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXkpeyByZXR1cm4gKGlzc2V0KCR0aGlzLT5kYXRhWyRrZXldKSA/ICR0aGlzLT5kYXRhWyRrZXldIDogTlVMTCk7IH0KICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRrZXksJHZhbCl7ICR0aGlzLT5kYXRhWyRrZXldID0gJHZhbDsgfQogIHB1YmxpYyBmdW5jdGlvbiBoYXMoJGtleSkgeyByZXR1cm4gaXNzZXQoJHRoaXMtPmRhdGFbJGtleV0pOyB9Cn0KCmFic3RyYWN0IGNsYXNzIENvbnRyb2xsZXIgewogIHByb3RlY3RlZCAkcmVnaXN0cnk7CiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyZWdpc3RyeSl7ICR0aGlzLT5yZWdpc3RyeSA9ICRyZWdpc3RyeTsgfQogIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KXsgcmV0dXJuICR0aGlzLT5yZWdpc3RyeS0+Z2V0KCRrZXkpOyB9CiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksJHZhbHVlKXsgJHRoaXMtPnJlZ2lzdHJ5LT5zZXQoJGtleSwgJHZhbHVlKTsgfQogIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRrZXkpIHsgcmV0dXJuICR0aGlzLT5yZWdpc3RyeS0+aGFzKCRrZXkpOyB9Cn0KCmNsYXNzIEFwcGxpY2F0aW9ucyB7CiAgcHJpdmF0ZSAkcmVnaXN0cnk7CiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRSZWdpc3RyeSl7ICR0aGlzLT5yZWdpc3RyeSA9ICRSZWdpc3RyeTsgfQogIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KXsgcmV0dXJuICR0aGlzLT5yZWdpc3RyeS0+Z2V0KCRrZXkpOyB9CiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksJHZhbCl7IHJldHVybiAkdGhpcy0+cmVnaXN0cnktPnNldCgka2V5LCR2YWwpOyB9CiAgLy8gWW91IHNob3VsZCBpbXBsZW1lbnQgYW4gX19pc3NldCgpIG1ldGhvZCBoZXJlCiAgCiAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkQXBwbGljYXRpb24oKXsKICAgICAgJHRoaXMtPmFwcGxpY2F0aW9uX3BhZ2UgPSAnY3VycmVudC9wYWdlJzsKICAgICAgJGFwcGxpY2F0aW9uID0gbmV3IGFwcGxpY2F0aW9uKCR0aGlzLT5yZWdpc3RyeSk7CiAgICAgICRhcHBsaWNhdGlvbi0+aW5kZXgoKTsKICB9Cgp9CgpjbGFzcyBBcHBsaWNhdGlvbiBleHRlbmRzIENvbnRyb2xsZXIgewogIHB1YmxpYyBmdW5jdGlvbiBpbmRleCgpewogICAgZWNobyBlbXB0eSgkdGhpcy0+YXBwbGljYXRpb25fcGFnZSk/J3llcyc6J25vJzsKICAgIC8vUmV0dXJucyBZZXMKCiAgICAkcGFnZSA9ICR0aGlzLT5hcHBsaWNhdGlvbl9wYWdlOwogICAgZWNobyBlbXB0eSgkcGFnZSk/J3llcyc6J25vJzsKICAgIC8vUmV0dXJucyBObwogIH0KfQoKJGFwcHMgPSBuZXcgQXBwbGljYXRpb25zKG5ldyBSZWdpc3RyeSgpKTsKJGFwcHMtPmJ1aWxkQXBwbGljYXRpb24oKTs=