20250628 1.1 Beta 2
This commit is contained in:
88
sources/traits/JsonReWriter/JsonReWriterWriteTrait.php
Normal file
88
sources/traits/JsonReWriter/JsonReWriterWriteTrait.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
namespace goodboyalex\php_components_pack\traits\JsonReWriter;
|
||||
|
||||
use goodboyalex\php_components_pack\enums\JsonErrorCode;
|
||||
use goodboyalex\php_components_pack\exceptions\JsonException;
|
||||
use goodboyalex\php_components_pack\interfaces\ISerializable;
|
||||
|
||||
/**
|
||||
* Часть кода класса JsonReWriter, отвечающая за методы записи ключей и значений JSON.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.1.0
|
||||
*/
|
||||
trait JsonReWriterWriteTrait
|
||||
{
|
||||
/**
|
||||
* Записывает объект в ключ JSON.
|
||||
*
|
||||
* @param string $key Ключ JSON.
|
||||
* @param object $value Записываемое значение.
|
||||
*
|
||||
* @return void
|
||||
* @throws JsonException Ключ не содержит вложений, хотя от него требуется обратное.
|
||||
*/
|
||||
public function WriteObject (string $key, object $value): void
|
||||
{
|
||||
$this->Write($key, json_encode($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Записывает значение в ключ JSON.
|
||||
*
|
||||
* @param string $key Ключ JSON.
|
||||
* @param mixed $value Записываемое значение.
|
||||
*
|
||||
* @return void
|
||||
* @throws JsonException Ключ не содержит вложений, хотя от него требуется обратное.
|
||||
*/
|
||||
public function Write (string $key, mixed $value): void
|
||||
{
|
||||
// Получаем массив ключей по вложенности
|
||||
$keys = $this->ParseKey($key);
|
||||
|
||||
// Получаем текущий массив данных
|
||||
$current = &$this->JsonData;
|
||||
|
||||
// Для каждого ключа до предпоследнего
|
||||
for ($i = 0; $i < count($keys) - 1; $i++) {
|
||||
// - проверяем наличие ключа в текущем массиве
|
||||
if (!isset($current[$keys[$i]]))
|
||||
// - нет? Создаем ключ (массив)
|
||||
$current[$keys[$i]] = [];
|
||||
|
||||
// - проверяем, что ключ является массивом
|
||||
if (!is_array($current[$keys[$i]]))
|
||||
// - нет? Выбрасываем исключение
|
||||
throw new JsonException(errorCode: JsonErrorCode::KeyIsNotArray,
|
||||
errorMessage: "The key does not contain attachments, although it is required to do the opposite / Ключ не содержит вложений, хотя от него требуется обратное!");
|
||||
|
||||
// - переходим ко вложенному массиву
|
||||
$current = &$current[$keys[$i]];
|
||||
}
|
||||
|
||||
// Создаем ключ (значение)
|
||||
$current[$keys[count($keys) - 1]] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Записывает объект, реализующий интерфейс ISerializable, в ключ JSON.
|
||||
*
|
||||
* @param string $key Ключ JSON.
|
||||
* @param ISerializable $serializableValue Записываемый объект, реализующий интерфейс ISerializable.
|
||||
*
|
||||
* @return void
|
||||
* @throws JsonException Ключ не содержит вложений, хотя от него требуется обратное.
|
||||
*/
|
||||
public function WriteSerializable (string $key, ISerializable $serializableValue): void
|
||||
{
|
||||
// Сериализуем объект
|
||||
$serialized = $serializableValue->Serialize();
|
||||
|
||||
// Записываем в ключ
|
||||
$this->Write($key, $serialized);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user