<?php namespace nur\sery\wip\php\access; /** * Class ShadowAccess: accès en lecture depuis une instance de {@link IAccess} * puis écriture dans une autre instance de {@link IAccess} * * l'objet est initialisé avec deux instances de {@link IAccess}: $reader et * $writer * - au départ, les méthodes de {@link IGetter} attaquent $reader et les * méthodes de {@link ISetter} et {@link IDeleter} attaquent $writer * - dès qu'une méthode de {@link ISetter} est utilisée, les méthodes de * {@link IGetter} attaquent $writer * - si une méthode de {@link IDeleter} est utilisée, les méthodes de * {@link IGetter} attaquent de nouveau $reader comme initialement */ class ShadowAccess extends AbstractAccess { function __construct(IAccess $reader, IAccess $writer) { $this->reader = $reader; $this->writer = $writer; $this->getter = $reader; } protected IAccess $reader; protected IAccess $writer; protected IGetter $getter; function exists(): bool { return $this->getter->exists(); } function available(): bool { return $this->getter->available(); } function get($default=null) { return $this->getter->get($default); } function set($value): void { $this->writer->set($value); $this->getter = $this->writer; } public function del(): void { $this->writer->del(); $this->getter = $this->reader; } }