Changements incompatibles avec les versions pr�c�dentes
M�me si la majorit� du code PHP 5 devrait fonctionner sans modification, il est recommand� de surveiller les points suivants, qui introduisent des incompatibilit�s avec les versions pr�c�dentes.
- La fonction getrusage() retourne NULL quand on lui passe des arguments incorrects depuis PHP 5.2.1.
- ZipArchive::setCommentName() retourne TRUE en cas de succ�s depuis PHP 5.2.1.
- ZipArchive::setCommentIndex() retourne TRUE en cas de succ�s depuis PHP 5.2.1.
- SplFileObject::getFilename() retourne le nom du fichier, et non plus le chemin relatif jusqu'au fichier, depuis PHP 5.2.1.
- Changement de priorit� de la constante d'environnement PHPRC sur Windows 32. La variable d'environnement PHPRC a la priorit� sur la valeur enregistr�e dans la base de registre Windows.
- CLI SAPI ne cherche plus dans cwd le fichier php.ini ni le fichier php-cli.ini En PHP 5.1.x, une fonctionnalit� non-document�e a �t� ajout�e � la version CLI de PHP, pour rechercher dans le dossier courant un fichier de configuration PHP, menant � des comportements inattendus, si des fichiers inopin�s �taient trouv�s. Cette fonctionnalit� a �t� supprim�e en PHP 5.2.0, et PHP ne cherche plus dans le dossier de travail courant le fichier php.ini ni le fichier php-cli.ini. Voyez aussi la section sur la ligne de commande du manuel.
-
Ajout d'une alerte lors de calcul de modulo 0
Dans les versions pr�c�dentes de PHP, effectuer un calcul de modulo 0
ne donnait aucun message d'alerte, mais retournait la valeur inattendue FALSE.
Depuis PHP 5.2.0, cette tentative conduit � l'�mission d'une alerte de type
E_WARNING, comme lorsque des divisions par z�ro sont effectu�es.
<?php
print 10 % 0;
/* Warning: Division by zero in filename on line n */
?> -
D�sormais, __toString() est appel� � chaque fois que c'est possible.
La m�thode magique __toString() est maintenant appel�e dans tout
contexte de cha�ne, c'est � dire � chaque fois qu'un objet est utilis� comme cha�ne
de caract�res.
Le comportement par d�faut qui retournait une cha�ne repr�sentant l'identifiant de
l'objet a �t� abandonn� en PHP 5.2.0. Il �tait devenu probl�matique, car un identifiant
d'objet ne peut pas �tre consid�r� comme unique. Ce changement implique que votre
application est erron�e si elle utilise les identifiants d'objets comme valeur de
retour. Une tentative d'utilisation de cette valeur comme cha�ne de caract�res
produit maintenant une erreur fatale.
<?php
class foo {}
$foo = new foo;
print $foo;
/* Catchable fatal error: Object of class foo could
not be converted to string in filename on line n */
?><?php
class foo {
public function __toString() {
throw new Exception;
}
}
try {
print new foo;
/* Fatal error: Method foo::__toString() must
not throw an exception in filename on line n */
} catch(Exception $e) {}
?> -
Abandon des fonctions de classes statiques et abstraites.
A cause d'une inattention, PHP 5.0.x et 5.1.x permettaient les m�thodes statiques
abstraites dans les classes. Depuis PHP 5.2.x, seules les interfaces peuvent en avoir.
<?php
abstract class foo {
abstract static function bar();
/* Strict Standards: Static function foo::bar()
should not be abstract in filename on line n */
}
?> - L'extension Oracle n�cessite au moins la version 10 d'Oracle, sous Windows.
-
Ajout du support de la RFC2397 (flux data:).
L'introduction du flux de type 'data' peut conduire � un changement de comportement
sous Windows. Si vous travaillez avec un syst�me de fichiers NTFS,
que vous utilisez vos propres meta-flux dans vos applications, et que vous
avez d�j� baptis� l'un des fichiers du nom de 'data:', accessible sans aucune
information de chemin, sachez qu'il ne fonctionnera plus. Le correctif est d'utiliser
le protocole 'file:' pour y acc�der.
Voyez aussi la » RFC 2397
<?php
/* lorsque allow_url_include vaut OFF (valeur par d�faut) */
include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
/* Warning: include(): URL file-access is disabled
in the server configuration in filename on line n */
?> - R�gression dans le masque glob() Dans la version 5.2.4, une mise � jour de s�curit� a provoqu� une r�gression des masques de la forme "/foo/*/bar/*". Depuis la version 5.2.5, au lieu d'�mettre une alerte, la fonction glob() retourne FALSE lorsque les restrictions openbase_dir sont viol�es.