PHP 5 introduit les classes et les méthodes abstraites. Il n'est pas autorisé de créer une instance d'une classe définie comme abstraite. Toutes les classes contenant au moins une méthode abstraite doivent également être abstraites. Pour définir une méthode abstraite, il faut simplement déclarer la signature de la méthode et ne fournir aucune implémentation.
Lors de l'héritage d'une classe abstraite, toutes les méthodes marquées comme abstraites dans la déclaration de la classe parent doivent être définies par l'enfant ; de plus, ces méthodes doivent être définies avec la même visibilité , ou une visibilité plus faible. Par exemple, si la méthode abstraite est définie comme protégée, l'implémentation de la fonction doit être définie comme protégée ou publique, mais non privée.
Exemple 19.18. Exemple de classe abstraite
<?php
abstract class
AbstractClass
{
// Force la classe étendue à définir cette méthode
abstract protected function
getValue
();
abstract protected function
prefixValue
(
$prefix
);
// méthode commune
public function
printOut
() {
print
$this
->
getValue
() .
"\n"
;
}
}
class
ConcreteClass1
extends
AbstractClass
{
protected function
getValue
() {
return
"ConcreteClass1"
;
}
public function
prefixValue
(
$prefix
) {
return
"{$prefix}ConcreteClass1"
;
}
}
class
ConcreteClass2
extends
AbstractClass
{
public function
getValue
() {
return
"ConcreteClass2"
;
}
public function
prefixValue
(
$prefix
) {
return
"{$prefix}ConcreteClass2"
;
}
}
$class1
= new
ConcreteClass1
;
$class1
->
printOut
();
echo
$class1
->
prefixValue
(
'FOO_'
) .
"\n"
;
$class2
= new
ConcreteClass2
;
$class2
->
printOut
();
echo
$class2
->
prefixValue
(
'FOO_'
) .
"\n"
;
?>
L'exemple ci-dessus va afficher :
ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2
Du code ancien n'ayant aucune classe ou fonction nommée abstract devrait fonctionner sans modifications.