Часто ли Вы используете абстрактные классы в PHP?

Рейтинг: 0Ответов: 2Опубликовано: 27.01.2015

И в каких случаях? Есть такой пример, причем абстрактный класс вообще не понятно зачем тут использован:

<?php
abstract class AbstractClass
{
    // Наш абстрактный метод должен определять только необходимые аргументы
    abstract protected function prefixName($name);

}

class ConcreteClass extends AbstractClass
{

    // Наш дочерний класс может также определять необязательные аргументы, не указанные в сигнатуре родительского метода
    public function prefixName($name, $separator = ".") {
        if ($name == "Pacman") {
            $prefix = "Mr";
        } elseif ($name == "Pacwoman") {
            $prefix = "Mrs";
        } else {
            $prefix = "";
        }
        return "{$prefix}{$separator} {$name}";
    }
}

$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>

Ответы

▲ 1Принят

Крайне редко. Когда нужен конракт, нужно применять интерфейсы, иначе конечный пользователь обязан наследоваться от конкретного класса, а, возможно, у него уже есть готовая имплементация на руках с совсем другой иерархией. Абстрактный класс, в отличие от интерфейса, действует противоположным путем, интерфейс заставляет расширять функционал класса, а абсрактный класс наоборот, его ограничивает и впридачу привешивает какие-то свои методы. Я его использую только в двух случаях - когда он будет выполнять только роль промежуточного звена в иерархии (например, abstract HttpRequestException наследуется ServerErrorException и BadRequestException, и сам HttpRequestException не должен быть нигде вызван напрямую, н может вобрать в себя общий функционал ServerErrorException и BadRequestException) и когда нужно сделать базовую реализацию итерфейса (того функционала, который, скорее всего, потребуется всем имплементациям интерфейса).

▲ 1

Вот тут, человек в комментарии все четко написал, с примерами http://www.askdev.ru/