Forum und email

Elvont osztályok (abstract)

A PHP 5 lehetővé teszi az elvont osztályok és metódusok használatát. Nem lehet elvont osztálynak objektumtumpéldányát készíteni. Minden osztálynak elvontnak kell lennie, ami legalább egy elvont metódust tartalmaz. Az elvont metódusokak egyszerű metódusként kell deklarálni, de nem tartalmazhatnak belső kódot.

Amikor egy osztály elvont osztálytól örököl, minden elvont metódust deklarálni kell az osztályban; pótlólag ezeknek a metódusoknak ugyanolyan (vagy gyengébb) láthatósággal (visibillity) kell rendelkeznie. Például, ha egy elvont metódus "protected", a függvénynek vagy "protected"-nek, vagy "public"-nak kell lennie.

Example#1 Elvont osztály példa

<?php
abstract class AbstractClass
{
    
// Kényszerítjük az utód osztályt a deklarálásra
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);

    
// Közös metódus
    
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";
?>

A fenti példa a következő kimenetet adja:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Öreg kódnak, melynek nincs felhasználó által definált 'abstarct' nevű osztálya vagy függvénye módosítások nélkül futnia kell.