是否可以在子级中为类创建别名,并在其继承的抽象类中使用该别名。
请参见下面的代码作为示例。
使用Model
类的抽象类:
<?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
的方法对其子类的方法不了解,以便我可以继承它,并简单地别名要使用的Model和Request。
我仔细阅读了文档,但在我认为应该有办法做到这一点之后却找不到我的名字,但我必须忽略了一些东西。
答案 0 :(得分:1)
简而言之:不。别名是具有定义范围的文字,如果它们的含义不是文字和不可预测的,那就太疯狂了。
基本上,这就是为什么您不使用static
类方法,而是使用实例的原因。如果您要编写$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();
}
}