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.