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.