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.
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.
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' et '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.
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;
}
}
?>
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';
}
?>