* [Dictionary, ObjectArray] Исправлен баг сериализации. Теперь классы нормально восстанавливаются.
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| namespace goodboyalex\php_components_pack\traits;
 | ||
| 
 | ||
| use ArrayIterator;
 | ||
| 
 | ||
| /**
 | ||
|  * Часть кода класса ObjectArray и Dictionary, отвечающая за функции из наследуемых интерфейсов и классов.
 | ||
|  *
 | ||
|  * @author Александр Бабаев
 | ||
|  * @package php_components_pack
 | ||
|  * @version 1.0
 | ||
|  * @since 1.0
 | ||
|  */
 | ||
| trait ArrayBasicTrait
 | ||
| {
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function offsetExists (mixed $offset): bool
 | ||
|     {
 | ||
|         return isset($this->Container[$offset]);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function offsetGet (mixed $offset): mixed
 | ||
|     {
 | ||
|         return $this->Container[$offset] ?? null;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function offsetSet (mixed $offset, mixed $value): void
 | ||
|     {
 | ||
|         // Если смещение не указано
 | ||
|         if (is_null($offset))
 | ||
|             // - то добавляем объект в конец массива.
 | ||
|             $this->Container[] = $value;
 | ||
|         else
 | ||
|             // - иначе добавляем объект по указанному смещению.
 | ||
|             $this->Container[$offset] = $value;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function offsetUnset (mixed $offset): void
 | ||
|     {
 | ||
|         unset($this->Container[$offset]);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function getIterator (): ArrayIterator
 | ||
|     {
 | ||
|         return new ArrayIterator($this->Container);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * Существует ли элемент по указанному смещению.
 | ||
|      *
 | ||
|      * @param mixed $offset Смещение.
 | ||
|      *
 | ||
|      * @return bool Существует ли элемент по указанному смещению.
 | ||
|      */
 | ||
|     public function __isset (mixed $offset): bool
 | ||
|     {
 | ||
|         return isset($this->Container[$offset]);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function Serialize (): string
 | ||
|     {
 | ||
|         /**
 | ||
|          * ВНИМАНИЕ! Не используйте json_encode для сериализации объектов данного класса, так как он НЕ СОХРАНЯЕТ классы объектов!
 | ||
|          * Корректное восстановление объектов невозможно (восстанавливает только как ассоциативный массив).
 | ||
|          */
 | ||
|         return serialize($this->Container);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @inheritDoc
 | ||
|      */
 | ||
|     public function UnSerialize (string $serialized): void
 | ||
|     {
 | ||
|         /**
 | ||
|          * ВНИМАНИЕ! Не используйте json_decode для десериализации объектов данного класса, так как он НЕ ВОССТАНОВЛЯЕТ
 | ||
|          * классы объектов! Корректное восстановление объектов невозможно (восстанавливается только как ассоциативный массив).
 | ||
|          */
 | ||
|         $this->Container = unserialize($serialized);
 | ||
|     }
 | ||
| } |