Laravel 变量代替类名创建对象?

<?php
namespace App\Http\Controllers\Admin;
use App\Models\User;
class CommonController extends Controller
{
    protected $table_name;
    public function index()
    {
        $user = $this->table_name;
        $userModel = new $user();
        $rows = $userModel->all();
        return view('admin.users.member-list', compact('users'));
    }
}

我这个是父类控制器,然后子类继承,并且子类中设置属性$table_name的值为"User",当前类可以使用$this->table_name获取到"User"值,我想使用$user来代表类名(User),达到方法可以动态创建不同的类,在php原生态的方式中,这是可行的,但是在这里会提示User类没有找到。只有使用 new User()才行

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
leo
最佳答案

你的 $this->table_name 必须是 App\Models\Users 才行。或者:

        $user = 'App\\Models\\'.$this->table_name;
        $userModel = new $user();
5年前 评论
讨论数量: 4
leo

你的 $this->table_name 必须是 App\Models\Users 才行。或者:

        $user = 'App\\Models\\'.$this->table_name;
        $userModel = new $user();
5年前 评论

@leo ·$users = $user::where('status', '!=', -1)->orderBy('id', 'asc')->paginate(20); ·
new一个对象可以了,如果我想直接这样调用,怎么办呢?

5年前 评论
leo

@Goodbye (new $user)->where('status', '!=', -1)->orderBy('id', 'asc')->paginate(20)

5年前 评论

@leo 谢谢,,搞定了,非常感谢

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!