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

* Добавлен новый класс, описывающий информацию о версии, VersionInfo (подробнее см. VersionInfo.md).
2025-06-12 16:09:03 +03:00

272 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Описание класса 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