Laravel 如何创建任何类的对象
Posted
技术标签:
【中文标题】Laravel 如何创建任何类的对象【英文标题】:How Laravel creates object of any class 【发布时间】:2021-11-30 23:35:33 【问题描述】:我是 laravel 框架的新手,我不清楚 laravel 对象的创建。 laravel 如何创建类对象?
喜欢例如。我有一个名为 class MyTestController 的控制器,它定义了名为 MyMethod()
的方法这是这个控制器的路由, Route::get('Test',[MyTestController::class,'MyMethod']);
当我点击 -- http://localhost:81/laravel_project/Test,
MyMethod() 被调用。 我还没有使用 new 关键字创建 MyTestController 类对象,那么它的方法是如何调用的?
框架是否在幕后创建对象。
【问题讨论】:
欢迎来到 SO。简短的回答是 php.net/call_user_func 。也许 laravel 正在使用另一种方式,例如反射之类的。 它使用自己的dependency injection mechanism 【参考方案1】:换句话说,是的,Laravel 在幕后创建对象,但是根据我的经验,不建议/很少在 Laravel 框架中创建声明的对象(例如控制器、模型等),因为那是框架的作用,它们使您更简单。以模型为例,通过在模型名称后添加where($id)->first()
代码(最终代码为Model::where($id)->first()
),Laravel 将在调用first()
方法时根据查询结果为您创建模型对象。有很多方法与first()
具有相同的行为,get()
也是其中之一,不同之处在于first()
只会给你一个对象,而get()
会给你一个包含结果,即使它只匹配 1。
在你的情况下,即控制器,基本上 hassan 和 apokryfos 已经为你解答了。
【讨论】:
【参考方案2】:试试这个
Route::get('Test', function()
$object = new MyTestController();
var_dump($object);
);
【讨论】:
以上是关于Laravel 如何创建任何类的对象的主要内容,如果未能解决你的问题,请参考以下文章