Classi e Oggetti
PHP Manual

Astrazione delle classi

PHP 5 introduce classi e metodi astratti. Le classi definite come astratte non possono essere istanziate, e qualsiasi classe che contenga almeno un metodo astratto deve anch'essa essere astratta. I metodi definiti come astratti dichiarano unicamente la propria firma - non possono dichiarare un'implementazione.

Quando ereditati da una classe astratta, tutti i metodi segnalati come astratti nella dichiarazione della classe padre devono essere definiti dalla classe figlio; inoltre, questi metodi devono essere definiti con la stessa or a visibilità (o con una meno ristretta). Per esempio, se il metodo astratto è definito come protetto, l'implementazione della funzione può essere definita come protetta o publica, ma non privata. Inoltre le firme dei metodi devono corrispondere, cioè il tipo e il numero degli argomenti richiesti deve essere lo stesso. Questo vale anche per i costruttori a partire da PHP 5.4. Prima della 5.4 le firme dei costruttori possono essere differenti.

Example #1 Esempio di classe astratta

<?php
abstract class AbstractClass
{
    
// Forza la classe estendente a definire questo metodo
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);

    
// Metodi comuni
    
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";
?>

Il precedente esempio visualizzerà:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Codice vecchio che non ha classi definite dall'utente o funzioni dichiarate come 'abstract' dovrebbe poter essere eseguito senza necessità di modifiche.


Classi e Oggetti
PHP Manual