nur-sery/wip/php/access/ShadowAccess.php

52 lines
1.4 KiB
PHP

<?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;
}
}