Évolutions incompatibles avec les versions précédentes
Même si l'essentiel du code PHP 5 va fonctionner sans modification, il faut
faire attention aux situations suivantes, qui sont incompatibles avec
les versions précédentes :
-
L'API interne d'analyse des paramètres a été appliquée à toute les
extensions qui sont livrées avec PHP 5.3. Cette API retourne
NULL
si des paramètres incompatibles sont passés à la fonction. Il existe
quelques exceptions, comme la fonction get_class()
qui va retourner FALSE
en cas d'erreur.
-
clearstatcache() ne vide pas le cache de chemins
de la fonction realpath() par défaut.
-
realpath() est maintenant indépendant du système,
et fonctionne sur toutes les plate-formes.
Ceci a pour conséquence que les chemins relatifs incorrects comme
__FILE__ . "/../x" ne fonctionnent plus.
-
Les fonctions call_user_func() et similaires propagent la variable
$this, même si la fonction appelante est la classe parente.
-
Les fonctions de tableaux : natsort(), natcasesort(),
usort(), uasort(), uksort(),
array_flip() et array_unique() n'acceptent plus les
objets passés comme arguments. Si vous avez besoin d'accéder à leurs propriétés comme
dans un tableau, il faudra commencer par transtyper les objets en tableau.
-
Le comportement des fonctions qui ont des paramètres par référence mais sont passés
par valeur a changé. Alors que la fonction acceptait des arguments par valeur,
une erreur fatale est maintenant émise. L'ancien code qui passait des constantes
ou des valeurs à une fonction qui attendait des références doit être modifié
pour assigner la valeur à une variable avant d'appeler la fonction.
-
La nouvelle bibliothèque mysqlnd impose l'utilisation du nouveau format de mot de passe
de MySQL 4.1 (et plus récent). L'utilisation du vieux format de 16 octets fait que
mysql_connect() produit le message d'erreur suivant :
"mysqlnd cannot connect to MySQL 4.1+ using old authentication".
-
La nouvelle bibliothèque mysqlnd ne lit pas les fichiers de configuration MySQL
(my.cnf/my.ini), alors que l'ancienne bibliothèque libmysqlclient le faisait. Si
votre code utilise les paramètres des fichiers de configuration MySQL, vous
pouvez les charger explicitement en utilisant la fonction
mysqli_options(). Notez que cela signifie que
les constantes spécifiques
PDO::MYSQL_ATTR_READ_DEFAULT_FILE
et PDO::MYSQL_ATTR_READ_DEFAULT_GROUP
ne sont pas
définies si le support de MySQL dans PDO a été compilé avec mysqlnd.
-
Le caractère / final a été supprimé des retours de méthodes des classes
SplFileInfo et des autres classes de dossier similaires.
-
La fonction magique __toString n'accepte
plus d'arguments.
-
Les méthodes magiques
__get,
__set,
__isset,
__unset,
__call
doivent toujours être publiques, et ne peuvent plus être statiques.
La signature des méthodes est vérifiée à la compilation.
-
La méthode magique __call
est appelée en cas d'accès à une méthode privée ou protégée.
-
func_get_arg(), func_get_args() et
func_num_args() ne peuvent plus être appelées depuis le
contexte le plus éloigné d'un fichier qui a été inclus via
include ou
require
depuis l'intérieur d'une fonction du fichier appelant.
-
Une couche d'émulation pour l'extension MHASH a été ajoutée. Cependant, tous les
algorithmes ne sont pas pris en charge, notamment l'algorithme s2k. Ceci
signifie que s2k n'est plus disponible à partir de PHP 5.3.0.
Les mots-clé suivants sont maintenant réservés, et ne peuvent plus être
utilisés dans les noms de fonctions, de classes, etc.