Comparer des versions en PHP

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 +) :

  1. pl ou p.[1] : 5.3.0-pl > 5.3.0
  2. (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
  3. nombre : 5.3.1 > 5.3.0
  4. rc ou RC : 5.3-rc > 5.3-dev
  5. beta ou b : 5.3-beta > 5.3a
  6. alpha ou a : 5.3.0a > 5.3.0c
  7. dev : 5.3.0-dev > 5.3.0-alpha1
  8. 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.

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/7053

Haut de page