52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\sery\wip\php\access;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class DoubleAccess: 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 DoubleAccess 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;
 | 
						|
  }
 | 
						|
}
 |