Как мы все знаем, абстрактный класс в 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, то там также нет ни единого абстрактного метода (копировать его содержимое не буду тк он слишком большой, да и каждый может увидеть это сам).
Тогда вопрос, на примере одного из самых популярных фреймворков:
- Почему эти классы объявлены именно абстрактными, а не обычными?