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