20250721 1.2 Бета 1

This commit is contained in:
2025-07-21 17:51:37 +03:00
parent 2c3ea12fc1
commit 04f6849ff4
12 changed files with 1162 additions and 147 deletions

View File

@@ -0,0 +1,43 @@
<?php
namespace goodboyalex\php_components_pack\traits\GUID;
use goodboyalex\php_components_pack\exceptions\TypeException;
use goodboyalex\php_components_pack\types\GUID;
/**
* Часть кода класса GUID, отвечающая за реализацию интерфейса IArrayable.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.2
*/
trait GUIDArrayableTrait
{
/**
* @inheritDoc
*/
public function ToArray (): array
{
return [
"type_class" => GUID::class,
"value" => $this->Value
];
}
/**
* @inheritDoc
* @throws TypeException Если тип не соответствует.
*/
public function FromArray (array $array): void
{
// Проверка типа
if (!isset($array["type_class"]) || $array["type_class"] != GUID::class)
// - если тип не соответствует, выбрасываем исключение
throw new TypeException($array["type_class"] ?? "", 'Неверный тип данных / Wrong data type.');
// Получаем значение GUID
$this->Value = $array["value"];
}
}

View File

@@ -0,0 +1,56 @@
<?php
namespace goodboyalex\php_components_pack\traits\GUID;
use Deprecated;
/**
* Часть кода класса GUID, отвечающая за реализацию интерфейса IComparable.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.2
*/
trait GUIDComparableTrait
{
/**
* @inheritDoc
*/
public function IsEqualsTo (mixed $other): bool
{
return $this->Value === $other->ToString();
}
/**
* @inheritDoc
*/
public function CompareTo (mixed $other): int
{
// Сравниваем строковые значения GUID
$compareResult = strcmp($this->Value, $other->ToString());
// Возвращаем результат сравнения
// - если текущий GUID меньше, чем второй
if ($compareResult < 0)
// - возвращаем -1
return -1;
// - если текущий GUID больше, чем второй
else if ($compareResult > 0)
// - возвращаем 1
return 1;
else
// - иначе если GUID равны, то возвращаем 0
return 0;
}
/**
* @inheritDoc
*/
#[Deprecated('Этот класс не имеет свойств. Данные методы не будут работать корректно. / This class has no properties. These methods will not work correctly.', '1.2')]
public function CompareByProperty (string $propertyName, mixed $other): int
{
// Этот класс не имеет свойств, поэтому возвращаем 0
return 0;
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace goodboyalex\php_components_pack\traits\GUID;
use goodboyalex\php_components_pack\types\GUID;
/**
* Часть кода класса GUID, отвечающая за реализацию интерфейса IDuplicated.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.2
*/
trait GUIDDuplicatedTrait
{
/**
* @inheritDoc
*/
public function Duplicate (): object
{
return GUID::Parse($this->Value);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace goodboyalex\php_components_pack\traits\GUID;
/**
* Часть кода класса GUID, отвечающая за реализацию интерфейса IHashable.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.2
*/
trait GUIDHashableTrait
{
/**
* @inheritDoc
*/
public function Hash (): string
{
return md5($this->Value);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace goodboyalex\php_components_pack\traits\GUID;
/**
* Часть кода класса GUID, отвечающая за реализацию интерфейса JsonSerializable.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.2
*/
trait GUIDJsonSerializableTrait
{
/**
* @inheritDoc
*/
public function jsonSerialize (): string
{
return $this->Value;
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace goodboyalex\php_components_pack\traits\GUID;
use goodboyalex\php_components_pack\exceptions\TypeException;
/**
* Часть кода класса GUID, отвечающая за реализацию интерфейса ISerializable.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.2
*/
trait GUIDSerializeTrait
{
/**
* @inheritDoc
*/
public function Serialize (): string
{
// Получаем массив
$array = $this->ToArray();
// Преобразуем в JSON
return json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
/**
* @inheritDoc
* @throws TypeException Если тип не соответствует.
*/
public function UnSerialize (string $serialized): void
{
// Преобразуем в массив
$array = json_decode($serialized, true, flags: JSON_UNESCAPED_UNICODE);
// Получаем значение
$this->FromArray($array);
}
}