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

* Добавлен новый класс, описывающий информацию о версии, VersionInfo (подробнее см. VersionInfo.md).
This commit is contained in:
2025-06-12 16:09:03 +03:00
parent ef0f2ff54d
commit a439c0d2c9
4 changed files with 709 additions and 0 deletions

View File

@@ -0,0 +1,272 @@
# Описание класса VersionInfo
## Информация о версии
Версия класса: 1.0
Впервые введено в пакет с версии: 1.0.24
Описание класса: Класс, описывающий информацию о версии.
## Публичные свойства и константы класса
В классе определены следующие константы:
* `array StagesNames` - имена стадий сборки.
* `string DefaultTemplate` - шаблон вывода по умолчанию.
В классе определены следующе свойства:
* `int $Major` - мажорная версия (**только чтение**).
* `int $Minor` - минорная версия (**только чтение**).
* `int $Release` - номер релиза (**только чтение**).
* `int $Build` - номер сборки (**только чтение**).
* `VersionInfoStage $Stage` - стадия сборки (**только чтение**).
* `int $StageNumber` - номер стадии сборки (**только чтение**).
## Методы и функции
### Конструктор.
Конструктор принимает **4 обязательных** и **2 дополнительных параметра**:
* `int $Major` - мажорная версия (**обязательный**);
* `int $Minor` - минорная версия (**обязательный**);
* `int $Release` - номер релиза (**обязательный**);
* `int $Build` - номер сборки (**обязательный**);
* `VersionInfoStage` $Stage - стадия сборки (по умолчанию, `VersionInfoStage::Undefined`);
* `int $StageNumber` - номер стадии сборки (по умолчанию, `0`).
В результате создаётся новый класс `VersionInfo`.
Пример:
$version = new VersionInfo (1, 0, 0, 0, VersionInfoStage::Beta, 1);
Создаст класс `VersionInfo` для версии `1.0.0.0 Beta 1`.
### Преобразование в строку.
За преобразование в строку отвечает 2 метода: `ToString` и `__toString ()`.
#### Метод `ToString`
Этот метод возвращает строковое представление версии. Он содержит **2 необязательных параметра**:
* `string $template` - шаблон вывода (по умолчанию, `DefaultTemplate`);
* `array $stagesNames` - имена стадий сборки (по умолчанию, `StagesNames`).
Метод возвращает `string` - строковое представление версии.
В шаблоне должны присутствовать маркеры:
| Маркер | Описание | Обязательный |
|:--------------:|:--------------------|:------------:|
| #{Major} | Мажорная версия | ДА |
| #{Minor} | Минорная версия | ДА |
| #{Release} | Номер релиза | ДА |
| #{Build} | Номер сборки | ДА |
| #{Stage} | Стадия сборки | НЕТ |
| #{StageNumber} | Номер стадии сборки | НЕТ |
Эти маркеры в шаблоне заменяются на значения соответствующих свойств.
Синтаксис:
public function ToString (string $template, array $stagesNames): string
Пример,
// Создаю объект
$version = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
// Задаю шаблон
$template = #{Major}.#{Minor}.#{Release} (сборка #{Build});
// Вывожу
echo $version->ToString($template);
В результате на экране появится:
1.2.3 (сборка 4)
#### Метод `__toString`
Этот метод полностью аналогичен методу `ToString` с той лишь разницей, что в этом методе невозможно задать параметры
вывода (такие, как шаблон и имена стадий). Эти параметры берутся по умолчанию.
Этот метод необходим для вывода корректной информации при попытке привести объект класса `VersionInfo` к типу `string`.
Метод возвращает `string` - строковое представление версии.
Синтаксис:
public function __toString (): string
Пример,
// Создаю объект
$version = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
// Вывожу
echo $version;
В результате на экране появится:
1.2.3.4 Beta 5
### Сравнение версий
Для сравнения версий используется две аналогичные друг другу (но различающиеся по способу вызова) функции: `Compare` и
`CompareWith`.
#### Метод `Compare`
Это статический метод, который сравнивает две версии, заданные в **2 обязательных параметрах**:
* `VersionInfo $version1` - версия 1;
* `VersionInfo $version2` - версия 2.
Этот метод возвращает `int`:
| version1 | version2 | Результат |
|:---------:|:---------:|:---------:|
| Младше | Старше | -1 |
| Совпадает | Совпадает | 0 |
| Старше | Младше | 1 |
Синтаксис:
public static function Compare (VersionInfo $version1, VersionInfo $version2): int
Пример,
// Создаю объекты
// - $version11 младше $version12
$version11 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
$version12 = new VersionInfo (1, 2, 3, 5, VersionInfoStage::Beta, 6);
// $version21 совпадает с $version22
$version21 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
$version22 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
// $version31 старше $version32
$version31 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Stable);
$version32 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
// Сравниваю
$verCompare1 = VersionInfo::Compare($version11, $version12);
$verCompare2 = VersionInfo::Compare($version21, $version22);
$verCompare3 = VersionInfo::Compare($version31, $version32);
// Вывожу
echo $verCompare1 . '|' . $verCompare2 . '|' . $verCompare3;
В результате на экране появится:
-1|0|1
#### Метод `CompareWith`
Этот метод полностью аналогичен методу `Compare`. Он отличается лишь только тем, что **не статичен** и вызывается из
ранее созданного экземпляра класса. Он сравнивает текущую версию с переданной. Этот метод имеет только **1 обязательный
параметр**: `VersionInfo $version` - переданная версия.
Этот метод возвращает `int`: `1`, если текущая версия старше переданной, `0`, если совпадает и `-1`, если текущая версия
младше переданной.
Синтаксис:
public function CompareWith (VersionInfo $version): int
Пример,
// Создаю объекты
// - $version11 младше $version12
$version11 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
$version12 = new VersionInfo (1, 2, 3, 5, VersionInfoStage::Beta, 6);
// $version21 совпадает с $version22
$version21 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
$version22 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
// $version31 старше $version32
$version31 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Stable);
$version32 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
// Сравниваю
$verCompare1 = $version11->CompareWith($version12);
$verCompare2 = $version21->CompareWith($version22);
$verCompare3 = $version31->CompareWith($version32);
// Вывожу
echo $verCompare1 . '|' . $verCompare2 . '|' . $verCompare3;
В результате на экране появится:
-1|0|1
### Парсинг версий
Для преобразования строки с версией в объект `VersionInfo` используется статичный метод `Parse`.
Он требует **1 обязательный параметр** и **1 необязательный**:
* `string $version` - строка с версией (она должна быть в формате
`#{Major}.#{Minor}.#{Release}.#{Build} #{Stage} #{StageNumber}`, причём `#{Stage}` и `#{StageNumber}` можно не
указывать);
* `array $stagesNames` - имена стадий сборки (по умолчанию, `StagesNames`).
Этот метод возвращает объект {@link VersionInfo} с данными о версии или `new VersionInfo(0, 0, 0, 0)` в случае ошибки.
Синтаксис:
public static function Parse (string $version, array $stagesNames = self::StagesNames): VersionInfo
Пример,
// Создаю текст
$verText = '1.2.3.4 Beta 2';
// Преобразую
$version = VersionInfo::Parse($verText);
// Вывожу
echo $version;
В результате на экране появится:
1.2.3.4 Beta 2
### Вспомогательные методы
#### Метод `IsNotUndefinedOrStable`
Этот **статический** метод проверяет, является ли версия в неопределённой стадии или уже релизом.
Он имеет только **1 обязательный параметр**: `VersionInfoStage $versionStage` - стадия сборки.
Этот метод возвращает `bool`: `true`, если стадия сборки определена и не является релизом и `false` в противном случае.
Синтаксис:
public static function IsNotUndefinedOrStable (VersionInfoStage $versionStage): bool
Пример,
// Создаю объекты
$version1 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Undefined, 5);
$version2 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Beta, 5);
$version3 = new VersionInfo (1, 2, 3, 4, VersionInfoStage::Stable);
// Сравниваю
$res1 = VersionInfo::IsNotUndefinedOrStabl($version1->Stage);
$res2 = VersionInfo::IsNotUndefinedOrStabl($version2->Stage);
$res3 = VersionInfo::IsNotUndefinedOrStabl($version3->Stage);
// Вывожу
echo $res1 . '|' . $res2 . '|' . $res3;
В результате на экране появится:
false|true|false