/** * @param string $key * @param Repository $repository */ public function __construct($key, Repository $repository) { $this->key = $key; /* * Register this key (tied to this particular object) to the value * repository. * * If 1 key is requested multiple times, the value could be an object * that could be altered (by reference) and if all objects-for-same-key * reference that same value, all would've been changed (because all * would be that exact same value.) * * I'm using spl_object_hash to get a unique identifier linking $key to * this particular object, without using this object itself (I could use * SplObjectStorage.) If I stored this object, it wouldn't be destructed * when it's no longer needed, and I want it to destruct so I can free * up this value in the repository when it's no longer needed. */ $this->repository = $repository; $this->hash = spl_object_hash($this); $this->repository->add($this->hash, $this->key); }