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 如何创建任何类的对象的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 基于类的模型工厂

从空值 Laravel 8 创建默认对象

php反射类的使用及Laravel对反射的使用介绍

laravel 4 视图,在哪里放置基于类的作曲家

如何将 laravel 模型工厂创建方法返回的对象转换为包含模型字段的数组?

如何在 laravel 5 中模拟模型上的 create 方法?