downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

Nouvelles fonctionnalités> <Ce qui change en PHP 5.3.x
[edit] Last updated: Tue, 21 May 2013

view this page in

É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.



Nouvelles fonctionnalités> <Ce qui change en PHP 5.3.x
[edit] Last updated: Tue, 21 May 2013
 
add a note add a note User Contributed Notes Évolutions incompatibles avec les versions précédentes - [8 notes]
up
1
Chris Bolt
3 years ago
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.
up
0
Olivier
5 days ago
In PHP 5.2 this gives a syntax error but works in PHP 5.3:

<?php
array_values
(array(1, 2, 3))[0];
?>

I'm not finding this information in the release notes. There doesn't seem to be a chapter on syntax.
up
-1
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!
up
-2
Anonymous
10 months ago
Split() also does not work. You can use explode()
up
-2
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
up
-2
Boris &#39;borzakov&#39; 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
up
-2
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.
up
-2
scott dot mcnaught at synergy8 dot com
3 years ago
fopen('/dev/stdin/') no longer works
use fopen('php://stdin') instead

Cheers,
Scott

 
show source | credits | sitemap | contact | advertising | mirror sites