Migrer de PHP 5.2 à PHP 5.3

PHP 5.2 n’est plus maintenu depuis janvier 2011, il devient donc tant de migrer sur la version 5.3 (surtout que dorénavant, la 5.4 est sortie en stable …).

Mais une migration doit toujours se préparer, afin qu’elle se passe le mieux possible sans grosse interruption de service. Voici donc une présentation des incompatibilités entre ces deux versions.

Changements non rétro compatibles

  • clearstatcache : quand vous utilisez des fonctions qui accèdent aux propriétés d’un fichier (comme stat, is_dir, filemtime …), le résultat est mis en cache pour des raisons de performance. Depuis la version 5.3, l’appel à la fonction clearstatcache() ne reset pas le ‘realpath_cache’. Pour cela il faut utiliser :
    clearstatcache(true);
  • Avant 5.3, realpath() fonctionnait même si le dernier élément du chemin n’existait pas (sur plates-fomres *BSD). Maintenant, une erreur est renvoyée (donc le chemin doit exister). Pour moi, ce point est davantage un bug qui aurait également dû être corrigé sur 5.2 mais passons …
  • Avec les fonctions de la famille de call_user_func(), Les mots clefs $this, parent:: et self:: changent de comportement.
  • Les fonctions de tri de tableau (natsort()natcasesort()usort()uasort()uksort()array_flip(), et array_unique()) pouvaient trier des objets. Depuis 5.3, vous devez caster l’objet en tableau pour que cela fonctionne. Exemple :
    uksort( (array) $myobject);
  • Si vous utilisez des fonctions qui attendent des arguments par référence (avec ‘&’), le comportement des appels a changé :
    mafonction(CONSTANTE); // renverra une fatale.
    Il faut utiliser :
    $var = CONSTANTE;
    mafonction($var); //OK
  • Si vous utilisez l’extension mysqlnd (à la compilation de PHP), à partir de 5.3 vous ne pouvez plus vous connecter à des serveurs SQL qui utilisent encore l’ancienne authentification (< MySQL 4.1). Un appel à mysql_connect() renverra maintenant une erreur fatale.
  • La nouvelle librairie MySQLND ne lit plus les fichiers de configuration MySQL (my.cnf / my.ini). De même pour PDO si le support MySQL est activé. Vous pouvez utiliser mysqli_options() pour cela.
  • Si vous utilisez la classe SplFileInfo, le / final est maintenant supprimé lorsque vous manipulez des répertoires.
  • La méthode magique __toString() n’accepte plus d’arguments.
  • les méthodes magiques __get()__set()__isset()__unset(), et __call() doivent être publiques et non statiques.
  • La méthode magique __call() est maintenant appelée quand on accède à des méthodes privées ou protégées.
  • Pour des raisons de sécurité, les fonctions func_get_arg()func_get_args() et func_num_args() ne peuvent être appelées que dans le même fichier que la fonction (dans le cas où la fonction ferait un include ou un require par exemple).
  • L’extension Hash a été supprimée et remplacée par une couche d’émulation qui ne supporte pas l’algorithme de hashing ‘s2k’ (peu courant).
  • Les mots suivants sont maintenant réservés et ne peuvent être utilisés (pour des fonctions, des classes, etc.) :

Conclusion

Je pense que les points importants qui peuvent poser problème sont les méthodes magiques d’objet que vous auriez pu mal définir, ainsi que les fonctions de tri de tableau (utilisation totalement détournée). Le reste est vraiment très rare, et il y a peu de chance que vous utilisiez les points en question.

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *