Еще один вопрос про абстрактные классы на примере Laravel?

Как мы все знаем, абстрактный класс в php - это абстракция, инкапсуляция.... и должен иметь хотя бы один абстракный метод.

Но если посмотреть в Laravel родительский класс контроллера, то он АБСТРАКТНЫЙ, но там нет абстрактных методов:
<?php

namespace Illuminate\Routing;

abstract class Controller
{
    protected $middleware = [];

    public function middleware($middleware, array $options = [])
    {
        foreach ((array) $middleware as $m) {
            $this->middleware[] = [
                'middleware' => $m,
                'options' => &$options,
            ];
        }

        return new ControllerMiddlewareOptions($options);
    }

    public function getMiddleware()
    {
        return $this->middleware;
    }

    public function callAction($method, $parameters)
    {
        return $this->{$method}(...array_values($parameters));
    }

    public function __call($method, $parameters)
    {
        throw new BadMethodCallException(sprintf(
            'Method %s::%s does not exist.', static::class, $method
        ));
    }
}

Если посмотреть родительский класс Model, то там также нет ни единого абстрактного метода (копировать его содержимое не буду тк он слишком большой, да и каждый может увидеть это сам).

Тогда вопрос, на примере одного из самых популярных фреймворков:
- Почему эти классы объявлены именно абстрактными, а не обычными?
  • Вопрос задан
  • 301 просмотр
Решения вопроса 2
JhaoDa
@JhaoDa
LaravelRUS Team
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Как мы все знаем, абстрактный класс в php - это абстракция, инкапсуляция.... и должен иметь хотя бы один абстракный метод.
Не должен. В определении написано совсем наоборот, "класс должен быть помечен как абстрактный, если в нем есть абстрактный метод", обратное не обязательно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы