modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-08-17 18:11:11 +04:00
parent f0239ed2fb
commit 3759f10fa0
11 changed files with 92 additions and 61 deletions

View File

@ -4,33 +4,33 @@ namespace nur\sery\wip\php\access;
use nur\sery\cl; use nur\sery\cl;
abstract class AbstractAccess implements IAccess { abstract class AbstractAccess implements IAccess {
function available($src): bool { function available(): bool {
return $this->exists($src) && $this->get($src) !== false; return $this->exists() && $this->get() !== false;
} }
function inc(&$dest): int { function inc(): int {
$value = (int)$this->get($dest); $value = (int)$this->get();
$this->set(++$value, $dest); $this->set(++$value);
return $value; return $value;
} }
function dec(&$dest, bool $allowNegative=false): int { function dec(bool $allowNegative=false): int {
$value = (int)$this->get($dest); $value = (int)$this->get();
if ($allowNegative || $value > 0) { if ($allowNegative || $value > 0) {
$this->set(--$value, $dest); $this->set(--$value);
} }
return $value; return $value;
} }
function merge($values, &$dest): void { function merge(?array $values): void {
$array = $this->get($dest); $array = $this->get();
$array = cl::merge($array, $values); $array = cl::merge($array, $values);
$this->set($array, $dest); $this->set($array);
} }
function append($value, &$dest, $key=null): void { function append($value, $key=null): void {
$array = $this->get($dest); $array = $this->get();
cl::set($array, $key, $value); cl::set($array, $key, $value);
$this->set($array, $dest); $this->set($array);
} }
} }

View File

@ -0,0 +1,18 @@
<?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 {
}

View File

@ -17,13 +17,13 @@ class FormAccess extends AbstractAccess {
protected bool $allowEmpty; protected bool $allowEmpty;
function exists($src=null): bool { function exists(): bool {
$key = $this->key; $key = $this->key;
if ($key === null) return false; if ($key === null) return false;
return array_key_exists($key, $_POST) || array_key_exists($key, $_GET); return array_key_exists($key, $_POST) || array_key_exists($key, $_GET);
} }
public function available($src=null): bool { public function available(): bool {
$key = $this->key; $key = $this->key;
if ($key === null) return false; if ($key === null) return false;
if (array_key_exists($key, $_POST)) { if (array_key_exists($key, $_POST)) {
@ -35,7 +35,7 @@ class FormAccess extends AbstractAccess {
} }
} }
function get($src=null, $default=null) { function get($default=null) {
$key = $this->key; $key = $this->key;
if ($key === null) return $default; if ($key === null) return $default;
if (array_key_exists($key, $_POST)) { if (array_key_exists($key, $_POST)) {
@ -51,7 +51,7 @@ class FormAccess extends AbstractAccess {
} }
} }
function set($value, &$dest=null): void { function set($value): void {
$key = $this->key; $key = $this->key;
if ($key === null) return; if ($key === null) return;
if (!array_key_exists($key, $_POST) && array_key_exists($key, $_GET)) { if (!array_key_exists($key, $_POST) && array_key_exists($key, $_GET)) {
@ -61,8 +61,9 @@ class FormAccess extends AbstractAccess {
} }
} }
function del(&$dest=null): void { function del(): void {
$key = $this->key; $key = $this->key;
if ($key === null) return;
if (!array_key_exists($key, $_POST) && array_key_exists($key, $_GET)) { if (!array_key_exists($key, $_POST) && array_key_exists($key, $_GET)) {
cl::del($_GET, $key); cl::del($_GET, $key);
} else { } else {

View File

@ -17,13 +17,13 @@ class GetAccess extends AbstractAccess {
protected bool $allowEmpty; protected bool $allowEmpty;
function exists($src=null): bool { function exists(): bool {
$key = $this->key; $key = $this->key;
if ($key === null) return false; if ($key === null) return false;
return array_key_exists($key, $_GET); return array_key_exists($key, $_GET);
} }
public function available($src=null): bool { public function available(): bool {
$key = $this->key; $key = $this->key;
if ($key === null) return false; if ($key === null) return false;
if (array_key_exists($key, $_GET)) { if (array_key_exists($key, $_GET)) {
@ -33,7 +33,7 @@ class GetAccess extends AbstractAccess {
} }
} }
function get($src=null, $default=null) { function get($default=null) {
$key = $this->key; $key = $this->key;
if ($key === null) return $default; if ($key === null) return $default;
if (array_key_exists($key, $_GET)) { if (array_key_exists($key, $_GET)) {
@ -45,13 +45,13 @@ class GetAccess extends AbstractAccess {
} }
} }
function set($value, &$dest=null): void { function set($value): void {
$key = $this->key; $key = $this->key;
if ($key === null) return; if ($key === null) return;
cl::set($_GET, $key, $value); cl::set($_GET, $key, $value);
} }
function del(&$dest=null): void { function del(): void {
$key = $this->key; $key = $this->key;
if ($key === null) return; if ($key === null) return;
cl::del($_GET, $key); cl::del($_GET, $key);

View File

@ -6,16 +6,16 @@ namespace nur\sery\wip\php\access;
*/ */
interface IAccess extends IGetter, ISetter, IDeleter { interface IAccess extends IGetter, ISetter, IDeleter {
/** incrémenter la valeur */ /** incrémenter la valeur */
function inc(&$dest): int; function inc(): int;
/** décrémenter la valeur */ /** décrémenter la valeur */
function dec(&$dest, bool $allowNegative=false): int; function dec(bool $allowNegative=false): int;
/** /**
* fusionner le tableau $values dans la destination, qui est transformée en * fusionner le tableau $values dans la destination, qui est transformée en
* tableau d'abord si nécessaire * tableau d'abord si nécessaire
*/ */
function merge($values, &$dest): void; function merge(?array $values): void;
/** /**
* ajouter la valeur à la destination, qui est transformée en tableau d'abord * ajouter la valeur à la destination, qui est transformée en tableau d'abord
@ -24,5 +24,5 @@ interface IAccess extends IGetter, ISetter, IDeleter {
* la valeur est ajoutée avec la clé $key le cas échéant, ou à la fin du * la valeur est ajoutée avec la clé $key le cas échéant, ou à la fin du
* tableau si $key===null * tableau si $key===null
*/ */
function append($value, &$dest, $key=null): void; function append($value, $key=null): void;
} }

View File

@ -2,9 +2,9 @@
namespace nur\sery\wip\php\access; namespace nur\sery\wip\php\access;
/** /**
* Class IDeleter: une abstraction de suppression d'une valeur * Class IDeleter: une abstraction d'un objet qui permet de supprimer une valeur
*/ */
interface IDeleter { interface IDeleter {
/** supprimer la valeur dans la destination */ /** supprimer la valeur dans la destination */
function del(&$dest): void; function del(): void;
} }

View File

@ -2,18 +2,18 @@
namespace nur\sery\wip\php\access; namespace nur\sery\wip\php\access;
/** /**
* Class IGetter: une abstraction d'obtention d'une valeur * Class IGetter: une abstraction d'un objet qui permet d'obtenir une valeur
*/ */
interface IGetter { interface IGetter {
/** /**
* @return bool true si la valeur existe, false sinon. ne pas tenir compte de * @return bool true si la valeur existe, false sinon. ne pas tenir compte de
* si la valeur est utilisable ou non * si la valeur est utilisable ou non
*/ */
function exists($src): bool; function exists(): bool;
/** @return bool true si la valeur existe et est utilisable, false sinon */ /** @return bool true si la valeur existe et est utilisable, false sinon */
function available($src): bool; function available(): bool;
/** @return mixed la valeur depuis la source */ /** @return mixed la valeur depuis la source */
function get($src, $default=null); function get($default=null);
} }

View File

@ -2,9 +2,9 @@
namespace nur\sery\wip\php\access; namespace nur\sery\wip\php\access;
/** /**
* Class ISetter: une abstraction de modification d'une valeur * Class ISetter: une abstraction d'un objet qui permet de modifier une valeur
*/ */
interface ISetter { interface ISetter {
/** modifier la destination avec la valeur spécifiée */ /** modifier la destination avec la valeur spécifiée */
function set($value, &$dest): void; function set($value): void;
} }

View File

@ -1,35 +1,40 @@
<?php <?php
namespace nur\sery\wip\php\access; namespace nur\sery\wip\php\access;
use ArrayAccess;
use nur\sery\cl; use nur\sery\cl;
/** /**
* Class KeyAccess: accès à une valeur d'un tableau * Class KeyAccess: accès à une valeur d'un tableau
*/ */
class KeyAccess extends AbstractAccess { class KeyAccess extends AbstractAccess {
function __construct($key) { function __construct(&$dest, $key) {
$this->dest =& $dest;
$this->key = $key; $this->key = $key;
} }
/** @var array|ArrayAccess */
protected $dest;
/** @var int|string */ /** @var int|string */
protected $key; protected $key;
function exists($src): bool { function exists(): bool {
return $this->key !== null && cl::has($src, $this->key); return $this->key !== null && cl::has($this->dest, $this->key);
} }
function get($src, $default=null) { function get($default=null) {
if ($this->key === null) return $default; if ($this->key === null) return $default;
return cl::get($src, $this->key, $default); return cl::get($this->dest, $this->key, $default);
} }
function set($value, &$dest): void { function set($value): void {
if ($this->key === null) return; if ($this->key === null) return;
cl::set($dest, $this->key, $value); cl::set($this->dest, $this->key, $value);
} }
function del(&$dest): void { function del(): void {
if ($this->key === null) return; if ($this->key === null) return;
cl::del($dest, $this->key); cl::del($this->dest, $this->key);
} }
} }

View File

@ -17,13 +17,13 @@ class PostAccess extends AbstractAccess {
protected bool $allowEmpty; protected bool $allowEmpty;
function exists($src=null): bool { function exists(): bool {
$key = $this->key; $key = $this->key;
if ($key === null) return false; if ($key === null) return false;
return array_key_exists($key, $_POST); return array_key_exists($key, $_POST);
} }
public function available($src=null): bool { public function available(): bool {
$key = $this->key; $key = $this->key;
if ($key === null) return false; if ($key === null) return false;
if (array_key_exists($key, $_POST)) { if (array_key_exists($key, $_POST)) {
@ -33,7 +33,7 @@ class PostAccess extends AbstractAccess {
} }
} }
function get($src=null, $default=null) { function get($default=null) {
$key = $this->key; $key = $this->key;
if ($key === null) return $default; if ($key === null) return $default;
if (array_key_exists($key, $_POST)) { if (array_key_exists($key, $_POST)) {
@ -45,13 +45,13 @@ class PostAccess extends AbstractAccess {
} }
} }
function set($value, &$dest=null): void { function set($value): void {
$key = $this->key; $key = $this->key;
if ($key === null) return; if ($key === null) return;
cl::set($_POST, $key, $value); cl::set($_POST, $key, $value);
} }
function del(&$dest=null): void { function del(): void {
$key = $this->key; $key = $this->key;
if ($key === null) return; if ($key === null) return;
cl::del($_POST, $key); cl::del($_POST, $key);

View File

@ -5,24 +5,31 @@ namespace nur\sery\wip\php\access;
* Class ValueAccess: accès à une valeur scalaire * Class ValueAccess: accès à une valeur scalaire
*/ */
class ValueAccess extends AbstractAccess { class ValueAccess extends AbstractAccess {
function exists($src): bool { function __construct(&$dest) {
return $src !== null; $this->dest =& $dest;
} }
function available($src): bool { /** @var mixed */
return $this->exists($src); protected $dest;
function exists(): bool {
return $this->dest !== null;
} }
function get($src, $default=null) { function available(): bool {
if ($src === null) return $default; return $this->exists();
else return $src;
} }
function set($value, &$dest): void { function get($default=null) {
$dest = $value; if ($this->dest === null) return $default;
else return $this->dest;
} }
function del(&$dest): void { function set($value): void {
$dest = null; $this->dest = $value;
}
function del(): void {
$this->dest = null;
} }
} }