php new self()报错

发布于 2022-09-12 00:12:35 字数 176 浏览 13 评论 0

public function t2()  
{  
  

  $receiver = new self();  
 
  
}

image.png

框架thinkphp6

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不奢求什么 2022-09-19 00:12:35

错误提示已经很明显了:__construct() 缺少参数,看你贴的代码是没有传入 $app,我没有用过 TP6,不过像在这样的框架里,获取一个对象的方法是使用容器,使用容器时它会把依赖自动注入(即将$app 自动实例化),如果使用 new 是不会注入依赖的。

所以在使用容器时,可以这样:$receiver = invoke('xxx');
使用 new 方式时,可以这样:

$app = new App();
$receiver = new Receiver($app);

具体可以参考 TP6 的文档:https://www.kancloud.cn/manual/thinkphp6_0/1037489

怪我鬧 2022-09-19 00:12:35

因为依赖关系,如上面所说,self 对应的类的构造方法(也可能是继承过来的),需要至少一个类型为 App 的参数,但是你没有给他,所以在这里你需要给他一个 App ,但是通常在框架中,要处理这些有依赖的构造方法可以根据实际来,如果你有一个现成的 App 实例,你可以直接 new 并传递给他,可以看到构造函数传递的 $app , 最终赋值给了成员 $this->app ,所以你可以用如下代码

new self($this->app);

但是,如果你所在的位置没有 App 实例,你也可以用全局助手函数 app() 第一个参数传入类名称全名,即

app(self::class);

这样也是可以,这样容器会自动处理依赖。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文