public function &__get($name) { // key exists in rec_data? if (array_key_exists($name, $this->removeStubs($name)->rec_data)) { return $this->rec_data[$name]; } // key is not removed and exists in persistent data? if (!isset($this->removed[$name]) && $this->persistent->keyExists($name)) { $v = $this->persistent[$name]; if ($v instanceof parent) { $this->rec_data[$name] = new self($v); return $this->rec_data[$name]; } return $v; } // otherwise, return parent stub return parent::__get($name); }