* [ObjectArrayBasicTrait] заменён на [ArrayBasicTrait]. * [ArrayBasicTrait] изменён метод __isset. Теперь он обрабатывается корректно. * [ArrayBasicTrait] методы Serialize и UnSerialize теперь используют json_encode / json_decode * [+Dictionary] Класс, описывающий словарь типа строка (ключ) -> значение любого типа (значение).
100 lines
2.7 KiB
PHP
100 lines
2.7 KiB
PHP
<?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);
|
||
}
|
||
} |