babaev-an 2a03797bfe 20250505
[*: ActionStateMessageModel] улучшена реализация интерфейса ISerializable.

[*: ActionState] класс разбит на множество трейтов для более структурированности.

[*: ActionState] улучшена реализация интерфейса ISerializable.

[*: ActionState] класс внутреннего хранилища сообщений изменён на ObjectArray.

[*: ActionState] улучшена реализация метода Count.

[*: ActionState] улучшены реализации методов HasInfos, HasWarnings, HasErrors, IsSuccess, GetStringMessages и Clear.

 [*: ActionState] возвращаемое значение метода GetMessages заменено на ObjectArray.
2025-05-05 17:39:34 +03:00

125 lines
3.6 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
/**
* Отключаем ненужные проверки.
*
* @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);
}
}