gpt4 book ai didi

php - 抽象父级使用子级别名

转载 作者:行者123 更新时间:2023-12-04 17:01:49 25 4
gpt4 key购买 nike

是否可以在子类中为类命名,并在它继承的抽象类中使用该别名。

请参阅下面的代码作为示例。

使用 Model 的抽象类类(class):

<?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
]);
}

?>

child :
<?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使用对其子类的方法视而不见的方法,因此我可以继承它并简单地为要使用的模型和请求设置别名。

我已经仔细阅读了文档,但在我认为应该有办法做到这一点之后找不到我的身份,但我必须忽略一些东西。

最佳答案

简而言之:没有。别名是具有定义范围的文字,如果它们的含义不是文字和不可预测的,那将是疯狂的。

这基本上就是你不使用 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();
}
}

关于php - 抽象父级使用子级别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51644792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com