php_components_pack/sources/traits/ArrayBasicTrait.php
babaev-an 10ec8df983 20250522
* [Dictionary, ObjectArray] Исправлен баг сериализации. Теперь классы нормально восстанавливаются.
2025-05-22 22:03:39 +03:00

98 lines
3.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);
}
}