20250714 1.1.3
This commit is contained in:
		| @@ -51,7 +51,7 @@ trait ObjectArraySpecialTrait | ||||
|     public function AddRange (ObjectArray|array $objects): void | ||||
|     { | ||||
|         // Если передан массив, то не изменяем его, а если передан объект класса ObjectArray, то конвертируем его в массив объектов | ||||
|         $objectsToAdd = is_array($objects) ? $objects : $objects->ToArray(); | ||||
|         $objectsToAdd = is_array($objects) ? $objects : $objects->AsArray(); | ||||
|  | ||||
|         // Добавляем массив объектов | ||||
|         $this->Merge($objectsToAdd); | ||||
| @@ -62,7 +62,7 @@ trait ObjectArraySpecialTrait | ||||
|      * | ||||
|      * @return array Массив объектов, хранящихся в данном классе. | ||||
|      */ | ||||
|     public function ToArray (): array | ||||
|     public function AsArray (): array | ||||
|     { | ||||
|         return $this->Container; | ||||
|     } | ||||
|   | ||||
							
								
								
									
										104
									
								
								sources/traits/ObjectArray/ObjectArrayToArrayTrait.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								sources/traits/ObjectArray/ObjectArrayToArrayTrait.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,104 @@ | ||||
| <?php | ||||
|  | ||||
| namespace goodboyalex\php_components_pack\traits\ObjectArray; | ||||
|  | ||||
| use goodboyalex\php_components_pack\classes\ObjectArray; | ||||
| use goodboyalex\php_components_pack\exceptions\TypeException; | ||||
| use goodboyalex\php_components_pack\extensions\TypeExtension; | ||||
| use goodboyalex\php_components_pack\interfaces\IArrayable; | ||||
|  | ||||
| /** | ||||
|  * Часть кода класса ObjectArray, отвечающая за реализацию интерфейса Arrayable. | ||||
|  * | ||||
|  * @author Александр Бабаев | ||||
|  * @package php_components_pack | ||||
|  * @version 1.0 | ||||
|  * @since 1.1.3 | ||||
|  */ | ||||
| trait ObjectArrayToArrayTrait | ||||
| { | ||||
|     /** | ||||
|      * @inheritDoc | ||||
|      * @throws TypeException Если в массиве есть объекты, которые невозможно преобразовать в массив (происходит ошибка | ||||
|      *     метода ToArray из класса TypeExtension). | ||||
|      */ | ||||
|     public function ToArray (): array | ||||
|     { | ||||
|         // Создаю массив | ||||
|         $result = [ | ||||
|             "type_class" => ObjectArray::class | ||||
|         ]; | ||||
|  | ||||
|         // Перебираю все элементы | ||||
|         foreach ($this->Container as $item) { | ||||
|             // - если элемент реализует интерфейс IArrayable | ||||
|             if ($item instanceof IArrayable) | ||||
|                 // -- то вызываю метод ToArray и добавляю в массив его результат | ||||
|                 $result[] = $item->ToArray(); | ||||
|             else | ||||
|                 // -- иначе вызываю метод ToArray из класса TypeExtension и добавляю в массив его результат | ||||
|                 $result[] = TypeExtension::ToArray($item); | ||||
|         } | ||||
|  | ||||
|         // Возвращаю массив | ||||
|         return $result; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @inheritDoc | ||||
|      * @throws TypeException Если в массиве есть объекты, которые невозможно преобразовать в массив (происходит ошибка | ||||
|      *     метода FromArray из класса TypeExtension) или класс не существует. | ||||
|      */ | ||||
|     public function FromArray (array $array): void | ||||
|     { | ||||
|         // Очищаю массив | ||||
|         $this->Clear(); | ||||
|  | ||||
|         // Перебираю все элементы массива | ||||
|         foreach ($array as $key => $value) { | ||||
|             // - пропускаю специальные элементы, которые не являются объектами | ||||
|             if ($key == "type_class") | ||||
|                 continue; | ||||
|  | ||||
|             // - если элемент реализует интерфейс IArrayable | ||||
|             if ($this->IsArrayable($value)) { | ||||
|                 // -- то получаю имя класса | ||||
|                 $className = $array["type_class"]; | ||||
|                 // -- создаю объект | ||||
|                 $instance = new $className(); | ||||
|                 // -- вызываю метод FromArray | ||||
|                 $instance->FromArray($value); | ||||
|                 // -- и добавляю в массив | ||||
|                 $this->Container[] = $instance; | ||||
|             } | ||||
|             else | ||||
|                 // -- иначе вызываю метод FromArray из класса TypeExtension | ||||
|                 $this->Container[] = TypeExtension::FromArray($value, TypeExtension::DEFAULT_FROM_ARRAY_ON_CLASS()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Проверяет, реализует ли класс интерфейс IArrayable. | ||||
|      * | ||||
|      * @param array $array Массив. | ||||
|      * | ||||
|      * @return bool Возвращает <code>true</code>, если класс реализует интерфейс <code>IArrayable</code>, иначе | ||||
|      *     <code>false</code>. | ||||
|      * @throws TypeException Если класс не существует. | ||||
|      */ | ||||
|     private function IsArrayable (array $array): bool | ||||
|     { | ||||
|         // Получаю имя класса | ||||
|         $className = $array["type_class"]; | ||||
|  | ||||
|         // Проверяем, существует ли класс вообще | ||||
|         if (!class_exists($className)) | ||||
|             throw new TypeException($className, "Class $className is not exists / Класс $className не существует"); | ||||
|  | ||||
|         // Получаем список всех интерфейсов, реализуемых данным классом | ||||
|         $interfaces = class_implements($className); | ||||
|  | ||||
|         // Проверка, присутствует ли IArrayable среди списка реализованных интерфейсов и возвращаем результат | ||||
|         return in_array('IArrayable', $interfaces); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user