为了账号安全,请及时绑定邮箱和手机立即绑定

从子类动态设置类

从子类动态设置类

PHP
慕容3067478 2022-09-12 13:10:53
我正在尝试使用一些希望可重用的代码在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';}和摘要控制器:<?phpnamespace 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中收到错误:UserErrorException: Undefined property: App\Http\Controllers\UserController::$className in file .../app/Http/Controllers/AbstractController.php on line 14我尝试过声明和引用几种不同的方法,但似乎无法使其起作用。任何帮助是值得赞赏的!className
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

由于 在实现中定义了 ,因此可以通过 使用后期静态绑定来访问它。classNamestatic::className


还需要在模型类的命名空间前面附加。


这将变为:


class AbstractController extends Controller

{

  private const MODELS_NAMESPACE = 'App\\Models';


  public function createItem()

  {

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

    $className = self::MODELS_NAMESPACE . '\\' . static::className;

    $className::buildItem($inputJSON);

  }

}

演示:https://3v4l.org/Ng6bl


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信