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