Php 抽象父对象使用子对象';s别名
是否可以在子类中为类别名,并在其继承的抽象类中使用该别名 请参见下面的代码作为示例 使用Php 抽象父对象使用子对象';s别名,php,inheritance,namespaces,Php,Inheritance,Namespaces,是否可以在子类中为类别名,并在其继承的抽象类中使用该别名 请参见下面的代码作为示例 使用模型的抽象类类: <?php namespace App\Http\Controllers\Backend; use App\Http\Controllers\Controller; abstract class ResourceController extends Controller { public function index() { $model = Mo
模型的抽象类
类:
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
abstract class ResourceController extends Controller
{
public function index()
{
$model = Model::all();
return view('backend.pages.'.$this->name.'.index', [
'models' => $model
]);
}
?>
儿童:
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Requests\Review as Request;
use App\Models\Review as Model;
class ReviewsController extends ResourceController
{
protected $name = 'reviews';
}
?>
最终,我的意图是拥有一个ResourceController
,其方法对其子类的方法视而不见,这样我就可以继承它,并简单地别名使用哪个模型和请求
我仔细阅读了文档,在我认为应该有办法做到这一点之后,我找不到我是什么,但我一定忽略了什么。简言之:不。别名是具有定义范围的文字,如果它们的含义不是文字和不可预测的,那将是疯狂的 这就是为什么不使用
静态
类方法,而是使用实例的基本原因。如果您编写$this->model->all()
,那么子类如何重写该行为将是非常简单和明显的
使用静态类可以做到的最好方法是:
abstract class ResourceController extends Controller {
abstract function getModelClass();
public function index() {
$class = $this->getModelClass();
$model = $class::all();
}
}
class ReviewsController extends ResourceController {
function getModelClass() {
return Model::class;
}
}
但话说回来,你应该给自己更多的灵活性,改为这样做:
abstract class ResourceController extends Controller {
abstract function getAll();
public function index() {
$model = $this->getAll();
}
}