call_user_func_array() no longer accepts null as a second parameter and calls the function. It now emits a warning and does not call the function.
É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
NULLsi des paramètres incompatibles sont passés à la fonction. Il existe quelques exceptions, comme la fonction get_class() qui va retournerFALSEen 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_FILEetPDO::MYSQL_ATTR_READ_DEFAULT_GROUPne 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.
Chris Bolt ¶
3 years ago
munaw at munaw dot com ¶
2 years ago
gd_info():
Note:
Previous to PHP 5.3.0, the JPEG Support attribute was named JPG Support.
Be aware of this, in case you verify GD image support by this attribute!
mahbub at mahbubblog dot com ¶
2 years ago
If you're having the mysql connectivity problem for the short password format,there is a fix written by Mixu here
http://tinyurl.com/324pjer
Boris 'borzakov' Ploujoux ¶
2 years ago
For those who often use the short open tag notations <? ... ?> and mostly <?= $var ?> (useful for template files) instead of standard notation <?php ... ?> : be careful !
In 5.3 version, the setting directive of the first notation is not PHP_INI_ALL anymore but PHP_INI_PERDIR.
In other words, you can't enable the "short_open_tag" directive directly with ini_set() function anymore ; you'll now have to set it in php.ini or httpd.conf (if you have access to it), or per-dir with .htaccess files.
See : http://www.php.net/manual/en/ini.core.php#ini.short-open-tag
mitek17 sobaka gmail.com ¶
3 years ago
After php version > 5.2.9 flush() stopped working. As a result the output buffer will not be returned at all.
scott dot mcnaught at synergy8 dot com ¶
3 years ago
fopen('/dev/stdin/') no longer works
use fopen('php://stdin') instead
Cheers,
Scott
