_name = "Variable[" . $name . "]"; $this->_prior = $prior; $this->resetToPrior(); } public function &getValue() { $value = &$this->_value; // DEBUG $selfHash = \spl_object_hash($this); $selfName = (string)$this; return $value; } public function setValue(&$value) { // DEBUG $selfName = (string)$this; $selfHash = \spl_object_hash($this); $this->_value = &$value; } public function resetToPrior() { $this->_value = $this->_prior; } public function __toString() { return $this->_name; } } class DefaultVariable extends Variable { public function __construct() { parent::__construct("Default", null); } public function &getValue() { return null; } public function setValue(&$value) { throw new Exception(); } } class KeyedVariable extends Variable { private $_key; public function __construct(&$key, $name, &$prior) { parent::__construct($name, $prior); $this->_key = &$key; } public function &getKey() { $key = &$this->_key; return $key; } } ?>