Incompatibilit�s avec les version ant�rieures

Bien que la plupart des scripts PHP 4 existants devraient fonctionner, il convient de noter quelques incompatibilit�s avec les versions ant�rieures de PHP :

  • Il y a quelques nouveaux mots r�serv�s.
  • strrpos() et strripos() utilisent maintenant une cha�ne de caract�res compl�te (un seul caract�re auparavant) en tant qu'�l�ment de recherche.
  • L'utilisation d'index ill�gaux sur une cha�ne de caract�res entra�ne maintenant un message E_ERROR au lieu d'un message E_WARNING auparavant. Voici un exemple incorrect : $str = 'abc'; unset($str[0]);.
  • La fonction array_merge() a �t� modifi�e pour n'accepter que des tableaux. Pour chaque variable pass�e en param�tre autre qu'un tableau, un message E_WARNING sera envoy�. Soyez attentifs car votre script pourrait �mettre des E_WARNING de fa�on inopin�e.
  • La variable de serveur PATH_TRANSLATED n'est plus d�finie implicitement avec Apache2 SAPI contrairement � auparavant (PHP 4) o� elle �tait fix�e avec la m�me valeur que SCRIPT_FILENAME lorsqu'Apache ne la renseignait pas. Cette modification a �t� apport�e afin d'�tre en conformit� avec les » sp�cifications CGI. Merci de consulter le » bogue #23610 pour plus d'informations, ainsi que la description de $_SERVER['PATH_TRANSLATED'] du manuel. Ce probl�me affecte �galement PHP >= 4.3.2.
  • La constante T_ML_CONSTANT n'est plus d�finie par l'extension Tokenizer. Si error_reporting est r�gl�e � E_ALL, PHP va g�n�rer un avertissement. Bien que T_ML_CONSTANT n'ait jamais �t� utilis�e, elle �tait d�finie dans PHP 4. Avec PHP 4 et PHP 5, // et /* */ sont assimil�s � la constante T_COMMENT. Toutefois les commentaires de style PHPDoc /** */, qui sont analys�s depuis PHP 5, sont reconnus en tant que T_DOC_COMMENT.
  • $_SERVER contient dor�navant argc et argv si votre variables_order inclus "S". Si vous avez configur� votre syst�me pour qu'il ne cr�e pas $_SERVER, ils n'existeront bien s�r pas. Cette modification a �t� effectu�e afin que argc et argv soient toujours accessibles dans la version CLI quelle que soit la valeur de variables_order. Ainsi, la version CLI renseignera dor�navant toujours les variables $argc et $argv.
  • Un objet sans propri�t� n'est plus consid�r� comme vide (empty()).
  • Dans certains cas, les classes doivent �tre d�clar�es avant d'�tre utilis�es. Cela survient uniquement si les nouvelles fonctionnalit�s de PHP 5 (comme les interfaces) sont utilis�es. Sinon, le comportement sera le m�me qu'avant.
  • Les fonctions get_class(), get_parent_class() et get_class_methods() retournent d�sormais le nom de la classe comme elle a �t� d�clar�e (sensible � la casse), ce qui peut causer des probl�mes dans vos anciens scripts qui utilisent le comportement pr�c�dent (le nom de la classe �tait toujours retourn� en minuscules). Une solution possible est de rechercher ces fonctions dans tous vos anciens scripts et d'utiliser la fonction strtolower(). Ces changements de sensibilit� � la casse sont �galement appliqu�s aux constantes magiques pr�d�finies __CLASS__, __METHOD__ et __FUNCTION__. Les valeurs sont retourn�es exactement comme elles ont �t� d�clar�es (sensible � la casse).
  • La fonction ip2long() retourne maintenant FALSE lorsqu'une adresse IP invalide est entr�e comme argument de la fonction, et non plus -1.
  • Lorsque des fonctions sont d�finies dans un fichier inclus, elles peuvent �tre utilis�es dans le fichier principal, qu'elles soient d�finies avant ou apr�s l'instruction return(). Si le fichier est inclus deux fois, PHP 5 �met une erreur fatale car les fonctions sont toujours d�clar�es, tandis que PHP 4 n'a aucun probl�me avec �a. Il est recommand� d'utiliser l'instruction include_once() au lieu de v�rifier si le fichier a d�j� �t� inclus et de retourner, conditionnellement, l'inclusion du fichier.
  • include_once() et require_once() normalisent d'abord le chemin du fichier � inclure sous Windows. Donc inclure le fichier A.php et le fichier a.php revient � n'inclure qu'une seule fois ce fichier.

Exemple #1 strrpos() et strripos() recherchent maintenant une cha�ne de caract�res dans une autre

<?php
var_dump
(strrpos('ABCDEF','DEF')); //int(3)

var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>

Exemple #2 Un objet sans propri�t� n'est plus consid�r� comme vide (empty())

<?php
class test { }
$t = new test();

var_dump(empty($t)); // echo bool(false)

if ($t) {
    
// Cette portion de code sera ex�cut�e
}
?>

Exemple #3 Dans certains cas, les classes doivent �tre d�clar�es avant d'�tre utilis�es

<?php

// fonctionne sans erreur :
$a = new a();
class 
{
}


// ici, une erreur :
$a = new b();

interface 
c{
}
class 
implements {
}

?>