| 148 |
lars |
1 |
# Version
|
|
|
2 |
|
|
|
3 |
Library for handling version information and constraints
|
|
|
4 |
|
|
|
5 |
[](https://travis-ci.org/phar-io/version)
|
|
|
6 |
|
|
|
7 |
## Installation
|
|
|
8 |
|
|
|
9 |
You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/):
|
|
|
10 |
|
|
|
11 |
composer require phar-io/version
|
|
|
12 |
|
|
|
13 |
If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:
|
|
|
14 |
|
|
|
15 |
composer require --dev phar-io/version
|
|
|
16 |
|
|
|
17 |
## Version constraints
|
|
|
18 |
|
|
|
19 |
A Version constraint describes a range of versions or a discrete version number. The format of version numbers follows the schema of [semantic versioning](http://semver.org): `<major>.<minor>.<patch>`. A constraint might contain an operator that describes the range.
|
|
|
20 |
|
|
|
21 |
Beside the typical mathematical operators like `<=`, `>=`, there are two special operators:
|
|
|
22 |
|
|
|
23 |
*Caret operator*: `^1.0`
|
|
|
24 |
can be written as `>=1.0.0 <2.0.0` and read as »every Version within major version `1`«.
|
|
|
25 |
|
|
|
26 |
*Tilde operator*: `~1.0.0`
|
|
|
27 |
can be written as `>=1.0.0 <1.1.0` and read as »every version within minor version `1.1`. The behavior of tilde operator depends on whether a patch level version is provided or not. If no patch level is provided, tilde operator behaves like the caret operator: `~1.0` is identical to `^1.0`.
|
|
|
28 |
|
|
|
29 |
## Usage examples
|
|
|
30 |
|
|
|
31 |
Parsing version constraints and check discrete versions for compliance:
|
|
|
32 |
|
|
|
33 |
```php
|
|
|
34 |
|
|
|
35 |
use PharIo\Version\Version;
|
|
|
36 |
use PharIo\Version\VersionConstraintParser;
|
|
|
37 |
|
|
|
38 |
$parser = new VersionConstraintParser();
|
|
|
39 |
$caret_constraint = $parser->parse( '^7.0' );
|
|
|
40 |
|
|
|
41 |
$caret_constraint->complies( new Version( '7.0.17' ) ); // true
|
|
|
42 |
$caret_constraint->complies( new Version( '7.1.0' ) ); // true
|
|
|
43 |
$caret_constraint->complies( new Version( '6.4.34' ) ); // false
|
|
|
44 |
|
|
|
45 |
$tilde_constraint = $parser->parse( '~1.1.0' );
|
|
|
46 |
|
|
|
47 |
$tilde_constraint->complies( new Version( '1.1.4' ) ); // true
|
|
|
48 |
$tilde_constraint->complies( new Version( '1.2.0' ) ); // false
|
|
|
49 |
```
|
|
|
50 |
|
|
|
51 |
As of version 2.0.0, pre-release labels are supported and taken into account when comparing versions:
|
|
|
52 |
|
|
|
53 |
```php
|
|
|
54 |
|
|
|
55 |
$leftVersion = new PharIo\Version\Version('3.0.0-alpha.1');
|
|
|
56 |
$rightVersion = new PharIo\Version\Version('3.0.0-alpha.2');
|
|
|
57 |
|
|
|
58 |
$leftVersion->isGreaterThan($rightVersion); // false
|
|
|
59 |
$rightVersion->isGreaterThan($leftVersion); // true
|
|
|
60 |
|
|
|
61 |
```
|