Класове и обекти (PHP 5)
PHP Manual

Абстрактни класове

В PHP 5 са реализирани абстрактни класове и методи. Не е възможно инстанциирането на клас дефиниран като абстрактен. Всеки клас, който съдържа поне един абстрактен метод, трябва също да се дефинира като абстрактен. Методите, декларирани като абстрактни, имат прототип, но не и имплементация.

При наследяване от абстрактен клас, всички методи декларирани като абстрактни в родителския клас трябва да бъдат дефинирани в дъщерния клас; освен това, тези методи трябва да бъдат със същата (или по-малко рестриктивна) видимост. Например ако абстрактният метод е дефиниран като protected, имплементацията на функцията трябва да бъде дефинирана като protected или public, но не и private.

Example #1 Пример за абстрактни класове

<?php
abstract class AbstractClass
{
    
// Методи, които трябва да бъдат дефинирани в дъщерния клас
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);

    
// Общ метод
    
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";
?>

Примерът по-горе ще изведе:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Стар код, в който няма потребителски-дефинирани функции или класове с името 'abstract', ще работи без да са нужни промени по него.


Класове и обекти (PHP 5)
PHP Manual