Abstraction de classes
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� moins restreinte. 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 #1 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.