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 метода:
AddRange (array $dictionary), который добавляет элементы в виде ассоциативного массива ключ => значение в словарь;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)
- Первый выпуск проекта