* [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);
|
||
}
|
||
} |