20250625
* Добавлено перечисление VersionCompareRangeOption. * В классе VersionInfo добавлен метод CompareWithRange.
This commit is contained in:
		| @@ -2,9 +2,10 @@ | ||||
|  | ||||
| ## Информация о версии | ||||
|  | ||||
| Версия класса: 1.0 | ||||
| Версия класса: 1.1 | ||||
|  | ||||
| Впервые введено в пакет с версии: 1.0.24 | ||||
| Последнее обновление в версии: 1.0.27 | ||||
|  | ||||
| Описание класса: Класс, описывающий информацию о версии. | ||||
|  | ||||
| @@ -206,6 +207,106 @@ | ||||
|  | ||||
|     -1|0|1 | ||||
|  | ||||
| #### Метод `CompareWithRange` | ||||
|  | ||||
| Введено в версии `1.0.27`. | ||||
|  | ||||
| Это метод, который проверяет, находится ли текущая версия в заданном диапазоне, указанном в **2 необязательных | ||||
| параметрах**: | ||||
|  | ||||
| * `VersionInfo (или null) $left` - левая граница, по умолчанию, `null`; | ||||
| * `VersionInfo (или null) $right` - правая граница, по умолчанию, `null`. | ||||
|  | ||||
| В случае, если будет передан `null` вместо левой границы, то метод создаст класс `VersionInfo` с минимально возможной | ||||
| версией `0.0.0.0 PreAlpha 0`, а вместо правой - `VersionInfo` с максимально возможной версией | ||||
| `9223372036854775807.9223372036854775807.9223372036854775807.9223372036854775807 Stable` (здесь `9223372036854775807` - | ||||
| максимальное число INT по умолчанию - у вас может быть другое). | ||||
|  | ||||
| Границы могут совпадать, тогда поведение будет совпадать с методом `CompareWith` (при условии, что границы включены). | ||||
| Кроме того, работает защита "от дурака" и если границы перепутаны, то метод автоматически поменяет их местами. | ||||
|  | ||||
| **3-й необязательный параметр** отвечает за параметры сравнения. Это `ObjectArray` из перечисления | ||||
| `VersionCompareRangeOption`, который может содержать следующие настройки: | ||||
|  | ||||
| |      Настройка      |               Описание                | Включена по умолчанию | | ||||
| |:-------------------:|:-------------------------------------:|:---------------------:| | ||||
| | LeftBorderIncluded  | Включена ли левая граница в диапазон  |          ДА           | | ||||
| | RightBorderIncluded | Включена ли правая граница в диапазон |          ДА           | | ||||
|  | ||||
| Этот метод возвращает `int`: | ||||
|  | ||||
| |          Текущая версия           | Результат | | ||||
| |:---------------------------------:|:---------:| | ||||
| |         Младше диапазона          |    -1     | | ||||
| | Внутри диапазона (или на границе) |     0     | | ||||
| |         Старше диапазона          |     1     | | ||||
|  | ||||
| Синтаксис: | ||||
|  | ||||
|     public function CompareWithRange (?VersionInfo $left = null, ?VersionInfo $right = null, ?ObjectArray $options = null): int | ||||
|  | ||||
| Пример, | ||||
|  | ||||
|     // Создаю объекты | ||||
|     // - 1.2.3.4 Beta 1 | ||||
|     $versionInfo1 = new VersionInfo(1, 2, 3, 4, VersionInfoStage::Beta, 1); | ||||
|  | ||||
|     // - 1.1.3.4 Alpha 2 | ||||
|     $versionInfo2 = new VersionInfo(1, 1, 3, 4, VersionInfoStage::Alpha, 2); | ||||
|  | ||||
|     // - 1.1.1.1 Alpha 2 | ||||
|     $versionInfo3 = new VersionInfo(1, 1, 1, 1, VersionInfoStage::Alpha, 2); | ||||
|      | ||||
|     // - 5.5.5.5 Stable | ||||
|     $versionInfo4 = new VersionInfo(5, 5, 5, 5, VersionInfoStage::Stable); | ||||
|  | ||||
|     // Сравниваю | ||||
|     echo "Для начала простое сравнение: "; | ||||
|     $ver1d1 = $versionInfo1->CompareWithRange($versionInfo3, $versionInfo4); | ||||
|     $ver1d2 = $versionInfo2->CompareWithRange($versionInfo1, $versionInfo4); | ||||
|     $ver1d2 = $versionInfo4->CompareWithRange($versionInfo2, $versionInfo1); | ||||
|     echo "$ver1d1|$ver1d2|$ver1d3 \r\n" | ||||
|  | ||||
|     echo "Немного перепутаем границы =) "; | ||||
|     $ver2d1 = $versionInfo4->CompareWithRange($versionInfo1, $versionInfo2); | ||||
|     echo "И получим: $ver2d1\r\n"; | ||||
|  | ||||
|     echo "А теперь с границами!\r\n"; | ||||
|     echo "- значение равно левой границе: "; | ||||
|     $ver3d1 = $versionInfo2->CompareWithRange($versionInfo2, $versionInfo1); | ||||
|     echo " $ver3d1\r\n"; | ||||
|     echo "- значение равно правой границе: "; | ||||
|     $ver3d2 = $versionInfo1->CompareWithRange($versionInfo2, $versionInfo1); | ||||
|     echo " $ver3d2\r\n"; | ||||
|     echo "- а теперь с выключением границ:\r\n"; | ||||
|     echo "-- для левой: "; | ||||
|     $ver3d3 = $versionInfo2->CompareWithRange($versionInfo2, $versionInfo1, $optionNotBorder); | ||||
|     echo " $ver3d3\r\n"; | ||||
|     echo "-- для правой: "; | ||||
|     $ver3d4 = $versionInfo1->CompareWithRange($versionInfo2, $versionInfo1, $optionNotBorder); | ||||
|     echo " $ver3d4\r\n"; | ||||
|     echo "А что если границы равны и значение равно?\r\n"; | ||||
|     echo "- для включённых границ: "; | ||||
|     $ver4d1 = $versionInfo1->CompareWithRange($versionInfo1, $versionInfo1); | ||||
|     echo " $ver4d1\r\n"; | ||||
|     echo "- для выключённых границ: "; | ||||
|     $ver4d2 = $versionInfo1->CompareWithRange($versionInfo1, $versionInfo1, $optionNotBorder); | ||||
|     echo " $ver4d2"; | ||||
|  | ||||
| В результате на экране появится: | ||||
|  | ||||
|     Для начала простое сравнение: 0|-1|1 | ||||
|     Немного перепутаем границы =) И получим: 1 | ||||
|     А теперь с границами! | ||||
|     - значение равно левой границе: 0 | ||||
|     - значение равно правой границе: 0 | ||||
|     - а теперь с выключением границ: | ||||
|     -- для левой: -1 | ||||
|     -- для правой: 1 | ||||
|     А что если границы равны и значение равно? | ||||
|     - для включённых границ: 0 | ||||
|     - для выключённых границ: -1 | ||||
|  | ||||
| ### Парсинг версий | ||||
|  | ||||
| Для преобразования строки с версией в объект `VersionInfo` используется статичный метод `Parse`. | ||||
|   | ||||
| @@ -11,7 +11,7 @@ use goodboyalex\php_components_pack\extensions\StringExtension; | ||||
|  * | ||||
|  * @author Александр Бабаев | ||||
|  * @package php_components_pack | ||||
|  * @version 1.0 | ||||
|  * @version 1.1 | ||||
|  * @since 1.0.24 | ||||
|  */ | ||||
| final class VersionInfo | ||||
| @@ -329,6 +329,11 @@ final class VersionInfo | ||||
|         // Устанавливаем правую границу | ||||
|         $rightBorder = $right ?? $maxVersion; | ||||
|  | ||||
|         // Проверяем, что границы не перепутаны | ||||
|         if ($leftBorder->CompareWith($rightBorder) == 0) | ||||
|             // - если границы перепутаны, то меняем их местами | ||||
|             [$leftBorder, $rightBorder] = [$rightBorder, $leftBorder]; | ||||
|  | ||||
|         // Проверяем текущую версию относительно границ | ||||
|         $compareLeft = $this->CompareWith($leftBorder); | ||||
|         $compareRight = $this->CompareWith($rightBorder); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user