Il arrive assez fréquemment que l’on ai besoin de comparer des numéros de version, par exemple lorsqu’une mise à jour de code se fait et qu’il faut mettre à niveau certains paramètres. En PHP il existe une fonction dédiée à cela, version_compare()
. Plutôt que de refaire une explication je vais reprendre celle fournie par le site PHP: Hypertext Preprocessor qui le fait très bien sur cette page de documentation de la fonction :
version_compare() remplace dans un premier temps _, - et + par un point (.) dans les chaînes de version et insère aussi des points avant et après tout caractère non-numérique pour que, par exemple, ‘4.3.5RC1’ devienne ‘4.3.5.RC.1’. Ensuite, elle découpe les résultats, similairement à explode(‘.’, $ver). Puis, elle compare les morceaux en allant de gauche à droite. Si une part contient des caractères alphabétiques, ils sont gérés dans l’ordre suivant : any string not found in this list < dev < alpha = a < beta = b < RC = rc < # < pl = p. De cette façon, il est possible de comparer non seulement des versions de différents niveaux, comme ‘4.1’ et ‘4.1.2’, mais aussi des versions de développement à la mode de PHP, à n’importe quel stade.
Notez que les versions intermédiaires, comme 5.3.0-dev, sont considérées comme inférieures à leurs versions finales (telle que 5.3.0).
Il est important de bien comprendre comment fonctionne cette version pour utiliser des numéros de version corrects pour vos développements. Je rappelle l’ordre d’importance des éléments qu’on peut trouver à une position donnée — en début, en fin ou séparée de la position suivante ou précédente par un .
(ou un des équivalents, _
, -
ou +
) :
- pl ou p.[1] :
5.3.0-pl > 5.3.0
- (vide) : une absence est considérée comme supérieure à tout autre élément (sauf p ou pl),
5.3.0 > 5.3.0-rc
- nombre :
5.3.1 > 5.3.0
- rc ou RC :
5.3-rc > 5.3-dev
- beta ou b :
5.3-beta > 5.3a
- alpha ou a :
5.3.0a > 5.3.0c
- dev :
5.3.0-dev > 5.3.0-alpha1
- toutes les autres chaînes de caractères non citées ci-dessus :
5.3-revolver > 5.3-abbey-road
Notez que si vous souhaitez utiliser des lettres pour numéroter vos versions, a (alpha) et b (beta) ont des significations particulières.
Notes
[1] Je n’ai pas trouvé à quoi correspond cette abréviation bien que je suppose que le p veuille dire post puisque cette forme est supérieure à n’importe quel nombre.
1 De mirovinben -
Mâârci beaucoup m’sieur…
Ça me conforte dans ma décision de n’utiliser que des chiffres et (surtout en lisant ton billet) avec le même nombre de champs.
2 De Franck -
De rien m’sieur !
3 De Pep -
En fait,
est pour et généralement pour .4 De Franck -
Aaaaaaaaaaah … et la lumière fut dans ma cervelle embrumée \o/
Merci El’Pep !
5 De Pep -
J’éteins en sortant ? ;-)
6 De Franck -
Ué, c’est bon pour la planète :-)