* [ObjectArrayBasicTrait] заменён на [ArrayBasicTrait].
* [ArrayBasicTrait] изменён метод __isset. Теперь он обрабатывается корректно.
* [ArrayBasicTrait] методы Serialize и UnSerialize теперь используют json_encode / json_decode
* [+Dictionary] Класс, описывающий словарь типа строка (ключ) -> значение любого типа (значение).
This commit is contained in:
2025-05-15 23:04:04 +03:00
parent 2a03797bfe
commit ee76392d71
6 changed files with 212 additions and 16 deletions

View File

@@ -0,0 +1,100 @@
<?php
namespace goodboyalex\php_components_pack\classes;
use ArrayAccess;
use Countable;
use goodboyalex\php_components_pack\interfaces\ISerializable;
use goodboyalex\php_components_pack\traits\ArrayBasicTrait;
use IteratorAggregate;
/**
* Класс, описывающий словарь типа строка (ключ) -> значение любого типа (значение).
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.0.14
*/
final class Dictionary implements ArrayAccess, IteratorAggregate, Countable, ISerializable
{
/**
* @var array $Container Контейнер.
*/
private array $Container = [];
// Реализация наследуемых интерфейсов и классов
use ArrayBasicTrait;
/**
* Добавление элемента в словарь.
*
* @param string $key Ключ.
* @param mixed $value Хранимое значение.
*
* @return void
*/
public function Add (string $key, mixed $value): void
{
$this->Container[$key] = $value;
}
/**
* Получение значения по ключу.
*
* @param string $key Ключ.
* @param mixed $default Значение по умолчанию, которое будет возвращено, если элемент с указанным ключом
* отсутствует.
*
* @return mixed Если элемент существует, то возвращается его значение, иначе default.
*/
public function Get (string $key, mixed $default = null): mixed
{
return $this->Container[$key] ?? $default;
}
/**
* Удаление элемента по ключу.
*
* @param string $key Ключ.
*
* @return void
*/
public function Remove (string $key): void
{
// Если элемент с указанным ключом существует
if ($this->Has($key))
// - то удаляем его.
unset($this->Container[$key]);
}
/**
* Проверка наличия элемента с указанным ключом.
*
* @param string $key Ключ.
*
* @return bool Есть ли элемент с указанным ключом.
*/
public function Has (string $key): bool
{
return isset($this->Container[$key]);
}
/**
* Очистка всех элементов.
*
* @return void
*/
public function Clear (): void
{
$this->Container = [];
}
/**
* @inheritDoc
*/
public function count (): int
{
return count($this->Container);
}
}

View File

@@ -5,7 +5,7 @@ namespace goodboyalex\php_components_pack\classes;
use ArrayAccess;
use Countable;
use goodboyalex\php_components_pack\interfaces\ISerializable;
use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArrayBasicTrait;
use goodboyalex\php_components_pack\traits\ArrayBasicTrait;
use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArrayConstantsTrait;
use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArrayLINQTrait;
use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArraySearchAndSortTrait;
@@ -28,7 +28,7 @@ final class ObjectArray implements ArrayAccess, IteratorAggregate, Countable, IS
private array $Container;
// Реализация наследуемых интерфейсов и классов
use ObjectArrayBasicTrait;
use ArrayBasicTrait;
// Константы
use ObjectArrayConstantsTrait;

View File

@@ -1,18 +1,18 @@
<?php
namespace goodboyalex\php_components_pack\traits\ObjectArray;
namespace goodboyalex\php_components_pack\traits;
use ArrayIterator;
/**
* Часть кода класса ObjectArray, отвечающая за функции из наследуемых интерфейсов и классов.
* Часть кода класса ObjectArray и Dictionary, отвечающая за функции из наследуемых интерфейсов и классов.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.0
*/
trait ObjectArrayBasicTrait
trait ArrayBasicTrait
{
/**
* @inheritDoc
@@ -69,7 +69,7 @@ trait ObjectArrayBasicTrait
*/
public function __isset (mixed $offset): bool
{
return isset($this->data[$offset]);
return isset($this->Container[$offset]);
}
/**
@@ -77,7 +77,7 @@ trait ObjectArrayBasicTrait
*/
public function Serialize (): string
{
return serialize($this->Container);
return json_encode($this->Container);
}
/**
@@ -85,6 +85,6 @@ trait ObjectArrayBasicTrait
*/
public function UnSerialize (string $serialized): void
{
$this->Container = unserialize($serialized);
$this->Container = json_decode($serialized, true);
}
}