20250724 1.2

[+] Добавлен новый тип GUID.

[*] В класс ObjectArray добавлена реализация интерфейсов IHashable, ISortable, IComparable.

[*] В класс Dictionary добавлена реализация интерфейсов IArrayable, IHashable, ISortable, IComparable.

[-] Класс GUIDExtension и все его методы помечены как устаревшие и скоро будут удалены.
This commit is contained in:
2025-07-24 13:02:04 +03:00
parent f8f14244d0
commit 24bf2a009f
9 changed files with 639 additions and 439 deletions

View File

@@ -0,0 +1,66 @@
<?php
namespace goodboyalex\php_components_pack\traits\ObjectArray;
use goodboyalex\php_components_pack\interfaces\IArrayable;
use goodboyalex\php_components_pack\interfaces\IHashable;
use goodboyalex\php_components_pack\interfaces\ISerializable;
/**
* Часть кода класса ObjectArray, отвечающая за реализацию интерфейса IHashable.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.2
*/
trait ObjectArrayHashableTrait
{
/**
* @inheritDoc
*/
public function Hash (): string
{
// Создаю массив хешей всех объектов
$toHash = [];
// Перебираю все объекты в массиве
foreach ($this->Container as $object) {
// - если объект реализует интерфейс IHashable
if ($object instanceof IHashable) {
// -- то хэширую его и добавляю в массив
$toHash[] = $object->Hash();
// -- переходим к следующему элементу
continue;
}
// - если объект реализует интерфейс ISerializable
if ($object instanceof ISerializable) {
// -- то сериализую его и добавляю в массив
$toHash[] = $object->Serialize();
// -- переходим к следующему элементу
continue;
}
// - если объект реализует интерфейс IArrayable
if ($object instanceof IArrayable) {
// -- то преобразую его в массив
$array = $object->ToArray();
// -- сериализую его и добавляю в массив
$toHash[] = json_encode($array, JSON_UNESCAPED_UNICODE);
// -- переходим к следующему элементу
continue;
}
// - иначе просто сериализую объект
$toHash[] = serialize($object);
}
// Возвращаю хеш массива
return md5(json_encode($toHash, JSON_UNESCAPED_UNICODE));
}
}