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 */
    ?>
    M�me avec __toString(), les objets ne peuvent pas �tre utilis�s comme des index ou des cl�s de tableaux. Nous envisageons d'ajouter un support natif de hachage ult�rieurement, mais pour les versions 5.2.x, vous devrez fournir votre propre syst�me, ou bien utiliser la nouvelle fonction SPL spl_object_hash(). __toString() ne peut pas �mettre d'exception.
    <?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.