newValue($value, $dest, $destKey); } /** * @var array définition du schéma, à redéfinir le cas échéant dans une classe * dérivée */ const SCHEMA = null; /** @var array */ protected $definition; /** retourner true si le schéma est de nature tableau associatif */ function isAssoc(?AssocSchema &$assoc=null): bool { return false; } /** retourner true si le schéma est de nature liste */ function isList(?ListSchema &$list=null): bool { return false; } /** retourner true si le schéma est de nature scalaire */ function isScalar(?ScalarSchema &$scalar=null): bool { return false; } abstract function newValue(?Value &$value=null, &$dest=null, $destKey=null): Value; ############################################################################# # key & properties function offsetExists($offset): bool { return array_key_exists($offset, $this->definition); } function offsetGet($offset) { if (!array_key_exists($offset, $this->definition)) return null; else return $this->definition[$offset]; } function offsetSet($offset, $value): void { throw AccessException::read_only(null, $offset); } function offsetUnset($offset): void { throw AccessException::read_only(null, $offset); } const _PROPERTY_PKEYS = []; function __get($name) { $pkey = cl::get(static::_PROPERTY_PKEYS, $name, $name); return cl::pget($this->definition, $pkey); } }