listKeys(); $foreignKeys = $var->listKeys(); if ($myKeys !== $foreignKeys) { return false; } foreach ($this->value as $key => $value) { if ($this->$key->differsFrom($value)->$key) { return false; } } return true; } public function listKeys() { $keys = array_keys($this->value); ksort($keys); return $keys; } public function count() { return count($this->value); } public function __clone() { foreach ($this->value as $key => $value) { $this->value->$key = clone($value); } } public function __get($key) { // ... } }