从子类动态设置类

我正在尝试使用一些希望可重用的代码在PHP中动态运行不同的类,但是我很难找到正确的方法来做到这一点。


目前,我正在运行一个POST请求,数据流动如下:


Route::post('/user/create', 'UserController@createItem');


到用户控制器:



namespace App\Http\Controllers;


use Illuminate\Cache\Repository;

use App\Models\User;


class UserController extends AbstractController{

    const className = 'User';

}

和摘要控制器:


<?php


namespace App\Http\Controllers;


use Illuminate\Http\Request;

use GuzzleHttp\Exception\RequestException;

use App\Models\User;


class AbstractController extends Controller

{


    public function createItem() {

        $inputJSON = file_get_contents('php://input');

        $this->className::buildItem($inputJSON);

        return;

    }

}

理想情况下,这应该调用一个静态方法,称为buildItem()


当我通过硬编码到抽象控制器中来测试它时,它按预期工作,但是当我尝试以这种方式执行此操作时,我在PostMan中收到错误:User


ErrorException: Undefined property: App\Http\Controllers\UserController::$className in file .../app/Http/Controllers/AbstractController.php on line 14


我尝试过声明和引用几种不同的方法,但似乎无法使其起作用。任何帮助是值得赞赏的!className


慕容3067478
浏览 70回答 1
1回答

紫衣仙女

由于 在实现中定义了 ,因此可以通过 使用后期静态绑定来访问它。classNamestatic::className还需要在模型类的命名空间前面附加。这将变为:class AbstractController extends Controller{&nbsp; private const MODELS_NAMESPACE = 'App\\Models';&nbsp; public function createItem()&nbsp; {&nbsp; &nbsp; $inputJSON = file_get_contents('php://input');&nbsp; &nbsp; $className = self::MODELS_NAMESPACE . '\\' . static::className;&nbsp; &nbsp; $className::buildItem($inputJSON);&nbsp; }}演示:https://3v4l.org/Ng6bl
打开App,查看更多内容
随时随地看视频慕课网APP