[*: ActionStateMessageModel] улучшена реализация интерфейса ISerializable. [*: ActionState] класс разбит на множество трейтов для более структурированности. [*: ActionState] улучшена реализация интерфейса ISerializable. [*: ActionState] класс внутреннего хранилища сообщений изменён на ObjectArray. [*: ActionState] улучшена реализация метода Count. [*: ActionState] улучшены реализации методов HasInfos, HasWarnings, HasErrors, IsSuccess, GetStringMessages и Clear. [*: ActionState] возвращаемое значение метода GetMessages заменено на ObjectArray.
125 lines
3.6 KiB
PHP
125 lines
3.6 KiB
PHP
<?php
|
||
/**
|
||
* Отключаем ненужные проверки.
|
||
*
|
||
* @noinspection PhpUnusedParameterInspection, PhpUnused
|
||
*/
|
||
|
||
namespace goodboyalex\php_components_pack\classes;
|
||
|
||
use goodboyalex\php_components_pack\interfaces\ISerializable;
|
||
use goodboyalex\php_components_pack\models\ActionStateMessageModel;
|
||
use goodboyalex\php_components_pack\traits\ActionState\ActionStateAddTrait;
|
||
use goodboyalex\php_components_pack\traits\ActionState\ActionStateGetTrait;
|
||
use goodboyalex\php_components_pack\traits\ActionState\ActionStateHasTrait;
|
||
use goodboyalex\php_components_pack\traits\ActionState\ActionStateStaticTrait;
|
||
|
||
/**
|
||
* Состояние действия.
|
||
*
|
||
* @author Александр Бабаев
|
||
* @package php_components_pack
|
||
* @version 1.0
|
||
* @since 1.0
|
||
*/
|
||
final class ActionState implements ISerializable
|
||
{
|
||
/**
|
||
* @var mixed|null $Value Значение
|
||
*/
|
||
public mixed $Value;
|
||
|
||
/**
|
||
* @var ObjectArray $Messages Список информации
|
||
*/
|
||
private ObjectArray $Messages;
|
||
|
||
/**
|
||
* Конструктор
|
||
*
|
||
* @param mixed|null $defValue Значение по умолчанию
|
||
*/
|
||
public function __construct (mixed $defValue = null)
|
||
{
|
||
// Присваиваю значение по умолчанию
|
||
$this->Value = $defValue;
|
||
|
||
// Создаю список сообщений
|
||
$this->Messages = new ObjectArray([]);
|
||
}
|
||
|
||
// Статичные методы и константы
|
||
use ActionStateStaticTrait;
|
||
|
||
// Методы добавления сообщений
|
||
use ActionStateAddTrait;
|
||
|
||
// Методы проверки на наличие сообщений
|
||
use ActionStateHasTrait;
|
||
|
||
// Методы получения сообщений
|
||
use ActionStateGetTrait;
|
||
|
||
/**
|
||
* Количество сообщений, удовлетворяющих условию.
|
||
*
|
||
* @param callable $predicate Условие выборки
|
||
*
|
||
* @return int Число сообщений
|
||
*/
|
||
public function Count (callable $predicate): int
|
||
{
|
||
return $this->Messages->Count($predicate);
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
public function Serialize (): string
|
||
{
|
||
// Создаю список сообщений
|
||
$list = [];
|
||
|
||
// Для каждого сообщения
|
||
foreach ($this->Messages as $message)
|
||
// - сериализую его и добавляю в список
|
||
$list[] = $message->Serialize();
|
||
|
||
// Возвращаю результат
|
||
return json_encode($list);
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
public function UnSerialize (string $serialized): void
|
||
{
|
||
// Очищаю список сообщений
|
||
$this->Clear(self::GET_STRING_ALL());
|
||
|
||
// Десериализую список сообщений
|
||
$list = json_decode($serialized, true);
|
||
|
||
// Для каждого сообщения
|
||
foreach ($list as $messageSerialized) {
|
||
// - создаю новое сообщение
|
||
$message = new ActionStateMessageModel();
|
||
// - десериализую его
|
||
$message->UnSerialize($messageSerialized);
|
||
// - добавляю в список
|
||
$this->Add($message);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Очищает список сообщений, согласно условию.
|
||
*
|
||
* @param callable $predicate Условие выборки
|
||
*
|
||
* @return void
|
||
*/
|
||
public function Clear (callable $predicate): void
|
||
{
|
||
$this->Messages->Delete($predicate);
|
||
}
|
||
} |