Changements dans les classes et objets
instanceof, is_a(), is_subclass_of() et catch
En PHP 5.0, is_a() a �t� rendu abandonn� et remplac� par l'op�rateur instanceof. Il y a eu des probl�mes dans les premi�res implantations de instanceof, qui se base sur __autoload() pour rechercher les classes non d�finies. Si la classe n'est pas d�finie, instanceof �mettait une erreur fatale E_ERROR, apr�s l'�chec de __autoload(). Le m�me comportement apparaissait avec l'op�rateur catch et la fonction is_subclass_of().
Aucune de ces instructions n'appelle plus __autoload() en PHP 5.1.x, et les palliatifs � base de class_exists() utilis� dans le code �crit en PHP 5.0.x ne sont plus n�cessaires.
M�thodes priv�es abstraites
Les m�thodes priv�es abstraites sont support�es en PHP entre 5.0.0 et et 5.0.4, mais elles ont �t� abandonn�es car private et abstract sont mutuellement exclusif.
Changements dans les r�gles d'h�ritage
Avec PHP 5.0, les d�clarations de fonctions dans les interfaces sont trait�es exactement de la m�me mani�re que pour les d�clarations de fonctions dans les classes. Ce n'est plus le cas depuis octobre 2004, au moment o� seuls l'option d'acc�s public a �t� autoris�e dans les d�clarations d'interface. Depuis avril 2005, ce qui est ant�rieur � PHP 5.0b1, l'option static a aussi �t� autoris�e. Mais les options protected and private �mettent d�sormais une erreur E_ERROR, tout comme abstract. Notez que cette modification ne va pas affecter votre code existant, car aucune de ces options n'a de sens dans le cadre d'une interface.
Changements dans les r�gles d'h�ritages
En PHP 5.0, il �tait possible d'avoir une d�claration de fonction qui d�rivait d'une classe ayant la m�me fonction mais pas la m�me signature. Par exemple :
Ce code va �mettre une erreur E_STRICT si utilis� avec PHP 5.1.x.
<?php
class Base {
function &return_by_ref() {
$r = 1;
return $r;
}
}
class Derived extends Base {
function return_by_ref() {
return 1;
}
}
?>
Constantes de classe
En PHP 5.0.x, le code suivant �tait valide :
En PHP 5.1.x, la red�finition d'une constante de classe �met une erreur fatale E_ERROR.
<?php
class test {
const foobar = 'foo';
const foobar = 'bar';
}
?>