[+] Добавлен новый тип GUID. [*] В класс ObjectArray добавлена реализация интерфейсов IHashable, ISortable, IComparable. [*] В класс Dictionary добавлена реализация интерфейсов IArrayable, IHashable, ISortable, IComparable. [-] Класс GUIDExtension и все его методы помечены как устаревшие и скоро будут удалены.
66 lines
2.4 KiB
PHP
66 lines
2.4 KiB
PHP
<?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));
|
||
}
|
||
} |