root; } /** @var array|null référence vers la racine de la vue */ protected $data; /** * @param $source array|BaseArray le tableau source * @param $pkeys array|string chemin de clé vers la racine de la vue */ function __construct(&$source, $pkeys=null) { if ($source === null) $source = []; if (is_array($source)) $root =& $source; elseif ($source instanceof IArray) $root =& $source->array(); else throw ValueException::unexpected_type(["array", IArray::class], $source); if ($pkeys === "" || $pkeys === null) $pkeys = []; if (is_string($pkeys)) $pkeys = explode(".", $pkeys); if (!is_array($pkeys)) throw ValueException::unexpected_type(["array", "string"], $pkeys); $data =& $root; foreach ($pkeys as $pkey) { if (!is_array($data)) $data = [$data]; elseif (!array_key_exists($pkey, $data)) $data[$pkey] = null; $data =& $data[$pkey]; } $key = A::last($pkeys); $md = $this->md(); if ($md !== null) $md->ensureSchema($data, $key); $this->data =& $data; } # Rajouter ceci dans les classes dérivées: #use TArrayMd, TAutoconstsStatic; // ou TArrayMdDynamic, TAutoconstsDynamic #const _AUTOGEN_CONSTS = ["" => [self::class, "_AUTOGEN_CONSTS"]]; ##--autogen-dynamic-- }