Ce qui change en PHP 5.3.x
Nouvelles fonctionnalités
Migration de PHP 5.2.x vers PHP 5.3.x
PHP Manual

## É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 fonctionne plus.
- Les fonctions call_user_func() et similaires propages 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 libmysql 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 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ées à 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 scope le plus éloigné d'un fichier qui a été inclus via include() ou require() depuis l'intérieur d'une fonction du fichier appelant.

Les mots-clé suivant sont maintenant réservés, et ne peuvent plus être utilisés dans les noms de fonctions, de classes, etc.

- goto
- namespace

Ce qui change en PHP 5.3.x
Nouvelles fonctionnalités
Migration de PHP 5.2.x vers PHP 5.3.x
PHP Manual