Un truc en PHP 5.3 que vous ne pouvez plus faire en PHP 5.4 multi define de la même constante

EN travaillant sur un script ecommerce ultra pourri mais qui est en prod et que je dois migrer vers un serveur avec une version PHP 5.4, je me suis aperçu qu’il y avait une erreur loggée dans error_log : il y avait deux définitions de la même constante. Et le scrit ne tournait donc pas sur le serveur, puisque après un test, avec un script php où je définissait deux fois la même constante, sur 5.3 ça tournait sans problème, la constante était aussi (presque) malléable qu’une variable, voici le script :

<?php
define('TO', "bonjour");
echo TO;
define('TO',"au revoir");
echo TO;
?>

sous PHP 5.3

$ php test.php
bonjourbonjour

Bien que la constante puisse être redéfinie, sa valeur  ne change pas.

sous PHP 5.4

$ php test.php
bonjourPHP Notice:  Constant TO already defined in /home/user/test.php on line 4
PHP Stack trace:
PHP   1. {main}() /home/user/test.php:0
PHP   2. define('TO', 'au revoir') /home/user/test.php:4

On voit que le premier echo est exécuté, mais que le second déclenche une notice (ça peut être une erreur fatale).

Je pense que c’est une bonne chose (absolument !), soyons logique une constante ne peut être changée alors pourquoi autoriser la redéclaration? Heureusement que ça a changé et que PHP soit un langage plus rigoureux.

Bonus :

En PHP 5.3 vous pouvez utiliser un index d’un tableau qui n’existe pas sans qu’il vous geule dessus,

ainsi :

<?php
echo $p[0];

ne vous avertira rien.

Retour en haut