Есть такое: PHP: class CLASS_A{ ... private array $data = array(); // многомерный, именованный ... /** получаем ссылку на ветвь в дереве */ function &getArray(string $path): array{ $_a = &$this->data; if (strlen($path) === 0){return $_a;} $_p = explode('.', $path); foreach($_p as $name){ $_a = $_a[$name]; } return $_a; } /** добавляем */ function add(array $data, string $toPath = ""): void{ $_to = $this->getArray($toPath); foreach(array_keys($data) as $name){$_to[$name] = $data[$name];} } //* изменяем */ function edit(string $data, string $name, string $toPath = ""): void{ $this->getArray($toPath)[$name] = $data; } ... } Естественно, так не работает. Так как во время $_to[$name] = $data[$name]; $_to - похоже, перестаёт быть ссылкой, и становится копией. Как выкрутиться в этой ситуации?
Нашел ошибку у себя: PHP: class CLASS_A{ ... private array $data = array(); // многомерный, именованный ... /** получаем ссылку на ветвь в дереве */ function &getArray(string $path): array{ $_a = &$this->data; if (strlen($path) === 0){return $_a;} $_p = explode('.', $path); foreach($_p as $name){ $_a = &$_a[$name]; // --> тут нужен амперсанд } return $_a; } /** добавляем */ function add(array $data, string $toPath = ""): void{ $_to = &$this->getArray($toPath); // --> и тут тоже нужен амперсанд foreach(array_keys($data) as $name){$_to[$name] = $data[$name];} } //* изменяем */ function edit(string $data, string $name, string $toPath = ""): void{ $this->getArray($toPath)[$name] = $data; } ... }