history.md


История версий

Здесь описаны все изменения проекта.

Версия 1.5 (04.03.2026)

  • зависимости проекта обновлены: теперь минимальная версия php для компонентов - 8.3;
  • [Dictionary]: в методе addRange добавлено автоматическое приведение ключа к типу string вместо проверки и пропуска отличных от него типов;
  • [FileHash]: вместо публичного свойства с ограничением на присовение (такое требует php 8.4), свойство hash заменено на функцию hash() для получения строкового хэша (ВАЖНО: в случае обновления уже используемого ранее проекта может выдавать ошибку Член имеет видимость private. Решением является замена ->hash на ->hash());
  • [VersionInfo]: вместо публичных свойств с ограничением на присовение (private(set) - такое требует php 8.4), свойства int $major, int $minor, int $release, int $build, string $stage и int $stageNumber заменены на функции getMajor (): int, getMinor (): int, getRelease (): int, getBuild (): int, getStage (): string и getStageNumber (): int (ВАЖНО: во избежания ошибок Член имеет видимость private, замените в проекте свойство на вызов соответствующей функции);
  • [ArrayExtension]: добавлен метод static function arrayAny (array $array, callable $callback): bool в php 8.4+ просто вызывающий array_any, а в меньшем - его аналог;
  • [TwoDimSize]: тип убран в пакет anb_php_math.

Версия 1.4.4 (02.01.2026)

  • повторная попытка исправления ошибки №1.

Версия 1.4.3 (02.01.2026)

  • исправлена ошибка №1.

Версия 1.4.2 (30.12.2025)

  • исправлена ошибка в типе ShortcodeAttributes, которая оставляла в массиве array $attributes значения ключей с кавычками.

Версия 1.4.1 (29.12.2025)

  • исправлена ошибка в методе fromArray класса TypeExtension, приводящая к ошибке Call to undefined method UnitEnum::getCases().

Версия 1.4 (28.12.2025)

  • в методе setParameterToClass класса ClassMapper убрано $property->setAccessible(true);, несовместимое в PHP 8.5 (и не работающее нормально в PHP 8.4);
  • добавлен тип ShortcodeAttributes - массив атрибутов шорткода;
  • добавлена модель ShortCodeModel - модель добавления шорткода;
  • добавлен класс ShortcodeParser - класс для обработки текста на шорткоды.

Версия 1.3.1 (23.12.2025)

  • создан универсальный интерфейс ILogger;
  • класс Logger теперь реализует интерфейс ILogger.

Версия 1.3.0 (10.12.2025)

  • все имена методов, свойств приведены к camelCase;
  • классы ObjectArray, Dictionary, FileHash, Tuple, TwoDimSize и VersionInfo перенесены в типы;
  • убран MessageType::Success вместо него используется MessageType::DEBUG;
  • кроме того, добавлены типы MessageType::INFO, MessageType::WARNING и MessageType::ERROR изменили целочисленный тип с 1, 2 и 3 на 10, 20 и 30 соответственно;
  • в модели сообщений ActionStateMessage убрано свойство bool $IsCritical. Вместо него добавлено свойство Dictionary $flags - флаги сообщения;
  • в классе ActionState переработаны методы add и addMessage, а также методы hasInfos, hasWarnings и hasErrors - теперь они не требуют аргументов;
  • в классе ActionState переработан метод isSuccess (bool $ignoreWarnings = false) - теперь он не требует аргументов, кроме необязательного bool $ignoreWarnings, который позволяет игнорировать предупреждения;
  • в класс File добавлен статический метод rotateFile (string $fileName, int $maxFiles = 0): void, который позволяет провести ротацию файла;
  • добавлен новый класс Logger, который позволяет создавать свою собственную систему журналирования событий;
  • в расширение TypeExtension добавлен метод isValueOf (mixed $value, string $requestType = 'mixed'): bool, который проверяет, является ли значение mixed $value типа string $requestType;
  • добавлены интерфейсы ILogFormatter и ILogHandler;
  • добавлены форматеры и обработчики системы журналирования событий;
  • переработан класс TwoDimSize;
  • в класс TwoDimSize добавлены математические функции;
  • переработан класс VersionInfo;
  • в тип Dictionary добавлен метод public static function isDictionary (mixed $dict, ?Tuple $types = null): bool, который проверяет, является ли значение mixed $dict словарём;
  • также в тип Dictionary добавлен конструктор, который позволяет преобразовать массив в словарь;
  • удалён класс GUIDExtension.

Версия 1.2.4 (29.11.2025)

  • в класс Tuple добавлена статическая функция IsTuple, проверяющая, является ли тип кортежем.

Версия 1.2.3 (23.11.2025)

  • добавлена частичная поддержка PHP 8.5;
  • добавлена модель параметров сопоставления классов ClassMapOptions, которая определяет игнорируемые и разрешённые параметры;
  • изменена функция MapClass класса ClassMapper: теперь вместо массива array $options = self::DefaultOptions передаётся ClassMapOptions $options = new ClassMapOptions().

Версия 1.2.2 (28.07.2025)

В этом релизе добавлены:

Классы

  • Encryptor - класс шифрования данных.

В этом релизе удалены:

Интерфейсы

  • IStoredAtSQL - перемещён в пакет php_db_components_pack.

Версия 1.2.1 (27.07.2025)

В этом релизе обновлены:

Типы

GUID:
  • константа GUID_EMPTY_STRING переименована в GUID_EMPTY;
  • метод isInvalidOrEmpty переименован в IsInvalidOrEmpty.

Классы

ClassMapper:
  • в функцию SetParameterToClassдобавлен “перевод” строки в класс GUID.

Версия 1.2 (24.07.2025)

В этом релизе добавлены:

Типы

-GUID - предназначен для работы с уникальными идентификаторами формата UUID/GUID (подробнее см. в документации).

Интерфейсы

  • IComparable - указывает, что класс можно сравнивать.
  • IHashable - указывает, что у класса можно получить хэш.
  • ISortable - указывает, что класс можно сортировать.

В этом релизе обновлены:

Классы

  • ObjectArray добавлена реализация интерфейсов IHashable, ISortable, IComparable.
  • Dictionary добавлена реализация интерфейсов IArrayable, IHashable, ISortable, IComparable.

Расширения

  • GUIDExtension и все его методы помечены как устаревшие и скоро будут удалены.

Версия 1.1.3 (14.07.2025)

В этом релизе обновлены:

Методы классов

Класс ObjectArray
  • Теперь класс реализует интерфейс IArrayable.
  • Метод ToArray (до 1.1.3) переименован в AsArray, чтобы не мешать реализации вышеназванного интерфейса.

Версия 1.1.2 (14.07.2025)

В этом релизе добавлены:

Интерфейсы

  • IArrayable - интерфейс, указывающий, что класс может быть переведён в массив и обратно.

Версия 1.1.1 (13.07.2025)

В этом релизе добавлены:

Перечисления

-ObjectArraySerializeMethod - перечисление типов сериализации массива объектов.

Расширения

  • TypeExtension - расширение для любого типа (подробнее см. в описании).

Модели

  • ObjectArraySerializeOptions - модель настроек сериализации для ObjectArray.

Методы классов

Класс ObjectArray
  • SerializeEx (?ObjectArraySerializeOptions $options = null): string - Сериализует массив объектов, используя настройки ObjectArraySerializeOptions|null $options(по умолчанию используется настройка по умолчанию) и возвращает строку сериализации.
  • статичный UnSerializeEx (string $serialized, ?ObjectArraySerializeOptions $options = null): ObjectArray, который десериализует массив объектов, заданный строкой в string $serialized, с помощью настройки сериализации ObjectArraySerializeOptions|null $options(по умолчанию используется настройка по умолчанию) и возвращает объект ObjectArray.

В этом релизе обновлены:

Модели

  • модель ActionStateMessageModel переименована в ActionStateMessage.

Версия 1.1 (29.06.2025)

В этом релизе добавлено новое перечисление JsonErrorCode, описывающее известные ошибки при работе с JSON файлами, исключение JsonException, возникающее при ошибке работы с JSON, и класс JsonReWriter для работы с json файлами, инструкция по которому доступна в описании к классу.

Версия 1.0.28 (26.06.2025)

В этом релизе в класс VersionInfo добавлены статические методы static function MinVersion (): VersionInfo и static function MaxVersion (): VersionInfo, которые возвращают минимальную и максимальную версии соответственно. Метод CompareWithRange обновлён с учётом этих новых методов. Подробнее см. описание к классу.

Версия 1.0.27 (25.06.2025)

В этом релизе добавлено новое перечисление VersionCompareRangeOption, которое задаёт параметры для сравнения версий на промежутке.

Также в классе VersionInfo добавлен метод CompareWithRange (?VersionInfo $left = null, ?VersionInfo $right = null, ?ObjectArray $options = null): int, который проверяет, находится ли текущая версия в заданном диапазоне. Подробнее об этом методе см. в документации к классу.

Версия 1.0.26 (15.06.2025)

В этом релизе исправлена ошибка Class "GetOnly" not found.

Версия 1.0.25 (14.06.2025)

В этом релизе добавлен атрибут для свойств класса #[GetOnly]. Он маркирует только те свойства, которые имеют только get часть, чтобы при маппинге класс корректно его прошёл.

Также улучшен класс ClassMapper. В его базовый метод добавлена проверка на атрибут #[GetOnly].

Версия 1.0.24 (12.06.2025)

В этом релизе добавлено перечисление стадий в информации о версии VersionInfoStage.

Также в этом релизе добавлен новый класс, описывающий информацию о версии, VersionInfo (подробнее см. VersionInfo.md).

Версия 1.0.23 (08.06.2025)

В этом релизе изменения коснулись только класса File.

Во-первых, был обновлён метод RemoveDir из-за проблем с удалением директорий. Теперь он корректно удаляет любую директорию.

Во-вторых, из-за изменения кода изменился и синтаксис метода RemoveDir: RemoveDir (string $directory, array $errorMessages = self::REMOVE_DIRECTORY_ERROR_MESSAGES): ActionState, где $errorMessages – массив с локализованным списком ошибок (по умолчанию, используется константа REMOVE_DIRECTORY_ERROR_MESSAGES с русскоязычным списком, для локализации рекомендуется передавать локализованные списки). Также теперь вместо bool возвращается ActionState, куда заносятся все ошибки при удалении, а в значение Value записывается bool - результат удаления.

В-третьих, добавлен метод FileSize (string $filename, array $errorLocalization = self::FILE_SIZE_ERROR_MESSAGES): ActionState, который получает размер файла, полный путь к которому передаётся в строковом параметре $filename, массив $errorLocalization служит для локализации ошибок и по умолчанию использует русскую локализацию, представленную в константе FILE_SIZE_ERROR_MESSAGES. Возвращает метод ActionState, куда заносятся все ошибки при получении размера, а в значение Value записывается int - размер файла в байтах или -1 при ошибке.

В-четвёртых, добавлен метод FileSizeToString (int $fileSize, array $fileSizeUnits = self::FILE_SIZE_UNITS, string $decimalSeparator = ','): string, который преобразует размер файла в байтах, указанный в параметре $fileSize, в красивое строковое представление. Массив $fileSizeUnits служит для локализации единиц измерения (байт, КБ, …) по умолчанию использует русскую локализацию, представленную в константе FILE_SIZE_UNITS. Также можно задать разделитель между сотыми (по умолчанию, используется русскоязычный разделитель - ,). Возвращает метод красивую строку: если размер файла, например, составляет 1500 байт, вывод будет 1.46 КБ.

Версия 1.0.22 (08.06.2025)

В этом релизе в классе File обновлён метод RemoveDir. Теперь он корректно удаляет не пустую директорию. Кроме того, в том же классе добавлен метод DirectoryExists (string $directory, bool $checkReadAccess = true, bool $checkWriteAccess = false): bool, который проверяет существование папки $directory, проверяет доступ на чтение $checkReadAccess = true и на запись $checkWriteAccess = true.

Версия 1.0.21 (26.05.2025)

В данный релиз добавлен класс File, который реализует функционал работы с файлами и выполнение операций над файлами одной командой.

Версия 1.0.20 (25.05.2025)

В этом релизе добавлен новый класс Tuple, реализующий работу кортежей почти как в C#.

Пример создания кортежа: $tuple = new Tuple(1, 'string', ['array1', 'array2', 'array3']);

Важно! Количество элементов кортежа не ограничено!

Пример получения:

$firstElement = $tuple->Get(0);
$secondElement = $tuple->Get(1);
$thirdElement = $tuple[2];

Или можно получить всё сразу:

[$firstElement, $secondElement, $thirdElement] = $tuple;

ВНИМАНИЕ! Кортеж подразумевает, что вы не можете добавлять элементы в него после создания. Поэтому любая попытка $tuple[] = "new element"; приведёт к выбрасыванию исключения Exception.

Версия 1.0.19 (24.05.2025)

В этом релизе было добавлено перечисление VarNotBoolAction, для определения действий в классе BoolExtensions (методы AnyTrue и TrueCount), если передана часть не булевого типа.

Также в этом релизе было обновлено расширение BoolExtensions: в методах AnyTrue и TrueCount убран выброс исключения, если какой-то аргумент из массива expressions не является булевым типом. Вместо него в обоих методах введён необязательный параметр $ifNotBool (тип VarNotBoolAction), который определяет действие: игнорирование (этот аргумент просто исключается из проверки), считать правдивым (вместо него ставится true) или считать ложным (вместо него ставится false). По умолчанию, этому параметру в обоих этих методах определено значение игнорировать.

Версия 1.0.18 (22.05.2025)

В этом релизе исправлен баг сериализации в классах Dictionary и ObjectArray. Теперь классы нормально восстанавливаются.

Версия 1.0.17 (20.05.2025)

В этом релизе в класс Dictionary были добавлены 2 метода:

  1. AddRange (array $dictionary), который добавляет элементы в виде ассоциативного массива ключ => значение в словарь;
  2. ToArray (), который возвращает все элементы словаря в виде массива.

Версия 1.0.16 (19.05.2025)

В этом релизе был исправлен баг с сериализацией в классах Dictionary и ObjectArray. Теперь классы нормально восстанавливаются.

Версия 1.0.15 (16.05.2025)

В этом релизе добавлено:

  • в классе Dictionary добавлен метод Keys (): array, который возвращает все ключи словаря;
  • в классе Dictionary добавлен метод Sort (bool $descending = false): void, который сортирует внутренние данные по ключам (в обратном порядке, если выбран $descending = true).

Версия 1.0.14 (15.05.2025)

В этом релизе обновлено:

  • трейт ObjectArrayBasicTrait переименован в ArrayBasicTrait;
  • в трейте ArrayBasicTrait изменён метод __isset: теперь он обрабатывается корректно;
  • в трейте ArrayBasicTrait методы Serialize и UnSerialize теперь используют json_encode / json_decode.

В этом релизе также добавлен новый класс Dictionary, который описывает словарь string (ключ) => mixed (значение).

Версия 1.0.13 (05.05.2025)

В этом релизе обновлено:

  • в модели ActionStateMessageModel улучшена реализация интерфейса ISerializable;
  • класс ActionState разбит на множество трейтов для более структурированности;
  • в классе ActionState улучшена реализация интерфейса ISerializable;
  • в классе ActionState класс внутреннего хранилища сообщений изменён на ObjectArray;
  • в классе ActionState улучшены реализации методов HasInfos, HasWarnings, HasErrors, IsSuccess, GetStringMessages, Count и Clear.
  • в классе ActionState возвращаемое значение метода GetMessages заменено на ObjectArray.

Версия 1.0.12 (24.04.2025)

В этом релизе добавлено:

  • в класс ObjectArray добавлен метод Add, который добавляет объект в массив объектов, хранящийся в данном классе ( аналогично добавлению элемента в массив с помощью []);
  • в класс ObjectArray добавлен метод AddRange, который добавляет массив объектов (или объекты, заданные с помощью array) в массив объектов, хранящийся в данном классе;
  • добавлен интерфейс IDuplicated для реализации дублирования классов;
  • добавлен интерфейс IStoredAtSQL для поддержки моделей и классов, реализующих хранение свойств в SQL базе данных.

Обновлено:

  • в класс ObjectArray добавлен метод Update: добавление элементов с помощью цикла foreach заменено на метод AddRange.

Версия 1.0.11 (24.02.2025)

В класс StringExtension добавлены новые методы:

  • метод Replace заменяет все вхождения строки поиска на строку замены в заданной строке (аналог mb_str_replace);
  • метод ReplaceAll заменяет все вхождения строк поиска на соответствующие строки замены в заданной строке.

Версия 1.0.10 (23.02.2025)

Обновление коснулось методов MapToClassProperty и SetParameterToClass класса ClassMapper. В них исправлена ошибка, при которой некорректно переводился тип bool.

Версия 1.0.9 (23.02.2025)

Обновление коснулось метода MapClass класса ClassMapper. В нём была отменена проверка свойства на доступность get и set, так как выдавала ошибку. Используйте лучше в таких случаях $options['ignored'] для таких свойств.

Версия 1.0.8 (22.02.2025)

Обновления коснулись класса ClassMapper и затронули следующие методы:

  • в GetDefaults улучшено определение типа: теперь проверка integer не вызовет ошибку, что ожидается int,
  • в MapClass теперь идёт проверка свойства на доступность get и set: свойства с только get и только set пропускаются.

Версия 1.0.7 (17.02.2025)

Добавлен новый статический класс BoolExtensions, расширяющий возможности типа bool.

Версия 1.0.6 (14.02.2025)

Добавлено:

  • в перечислении HashGetType добавлен параметр ByHash для получения класса хеша путём передачи ему уже вычисленного хэша;
  • в классе FileHash добавлены функции сериализации и де-сериализации (теперь класс реализует интерфейс ISerializable);
  • в классе FileHash добавлена функция валидации хэша Validate.

Обновлено:

  • в конструкторе класса FileHash обновлён необязательный параметр $hashBy (по умолчанию он теперь HashGetType:: ByHash).

Версия 1.0.5 (14.02.2025)

Добавлены:

  • класс TwoDimSize, описывающий двумерный размер;
  • перечисление HashGetType - перечисление типов получения хэша;
  • класс FileHash для работы с хэшем файла или строки.

Версия 1.0.4 (08.02.2025)

В класс ObjectArray добавлены функции:

  • Skip для пропуска $offset элементов массива;
  • Take для получения $count элементов массива;
  • SkipAndTake для получения $count элементов массива, начиная с индекса $startFrom.

Версия 1.0.3 (05.02.2025)

В класс ObjectArray добавлены методы:

  • First (mixed $default = null): mixed, который возвращает первый элемент массива или значение по умолчанию. Параметры: mixed|null $default - значение по умолчанию (по умолчанию, null). Возвращает mixed|null - первый элемент массива или значение по умолчанию.
  • Last (mixed $default = null): mixed, который возвращает последний элемент массива или значение по умолчанию. Параметры: mixed|null $default - значение по умолчанию (по умолчанию, null). Возвращает mixed|null - последний элемент массива или значение по умолчанию.

Версия 1.0.2 (05.02.2025)

В класс ObjectArray добавлена функция для лучшего получения колонки: GetColumnCallback (callable $columnPredicate, ?callable $wherePredicate = null): array. Она получает параметр callable $columnPredicate - функцию fn (mixed $item): mixed, которая возвращает имя колонки, и параметр callable|null $wherePredicate - условие выборки fn (mixed $item): bool, которое проверяет, подходит элемент или нет. Данная функция возвращает ассоциированный массив с результатом выборки.

Версия 1.0.1 (04.02.2025)

Почищено от ненужных файлов

Версия 1.0 (04.02.2025)

  • Первый выпуск проекта

На главную