La RFC Integer Semantics visait à améliorer la cohérence de PHP entre plate-formes différentes, en implémentant les changements suivants :

  • NaN et Infinity seraient toujours égaux à 0 lorsque transtypés en entiers,
  • les décalages bit-à-bit d’un nombre négatif de bits seraient interdits,
  • le décalage bit-à-bit vers la gauche d’un nombre de bits supérieur à la taille d’un entier donnerait toujours 0,
  • et le décalage bit-à-bit vers la droite d’un nombre de bits supérieur à la taille d’un entier donnerait toujours 0 ou -1 (en fonction du signe)

En effet, aujourd’hui, une partie de ces manipulations a un comportement qui dépend de l’architecture et de la plate-forme sur laquelle tourne PHP.

Cette RFC vise donc à uniformiser les choses, en considérant que c’est le rôle d’un langage de haut-niveau comme PHP.

Les échanges que nous avons eu sur la mailing-list php-internals@afup montrant assez bien que nous étions globalement d’accord sur le fait qu’uniformiser le langage est une bonne chose et que les développeurs travaillant avec un langage de haut-niveau ne devraient pas avoir à se soucier du type de détails que veut corriger la RFC, j’ai posté en ce sens sur internals@.

Cette RFC a été acceptée quelques jours après et le comportement de PHP 7, pour ce qui concerne quelques cas spécifiques de manipulation d’entiers, devrait donc être moins dépendant de la plate-forme sur laquelle nos applications sont exécutées.