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.