php - 是否可以将对象变量传递给匿名函数中的“使用”部分
问题描述
所以基本上我试图将当前对象变量传递给我的匿名函数,如下所示:
$options = Option::whereHas('texts', function($query) use ($this->language) {
$query->where(['language_id' => $this->language->id, ]);
})->where(['active' => 1, ])
->get();
但它给出了:
语法错误,意外的 '->' (T_OBJECT_OPERATOR),需要 ',' 或 ')'`。
无论如何,如果我将另一个变量设置为$this->language
并将其传递给匿名函数,它将正常工作。
$language = $this->language;
$options = Option::whereHas('texts', function($query) use ($language) {
$query->where(['language_id' => $language->id, ]);
})->where(['active' => 1, ])
->get();
那么,将对象变量传递给匿名函数中的“使用”部分的正确方法是什么?
解决方案
从文档中:
从 PHP 5.4.0 开始,当在类的上下文中声明时,当前类会自动绑定到它,从而使$this在函数范围内可用。如果不需要当前类的这种自动绑定,则可以使用静态匿名函数。
由于您在类中使用非静态匿名函数,因此$this
变量会自动绑定到函数而不需要use
它。这应该可以正常访问函数内的语言。
$options = Option::whereHas('texts', function($query) {
$query->where(['language_id' => $this->language->id]);
})
->where(['active' => 1])
->get();
但是,如果您不想这样做,并且想要use
一个变量,则应该将该use
语句视为第二组已定义的参数。例如,您不能定义类似function test($this) {}
or的函数function test($obj->property) {}
,因此您的use
语句中不能使用该格式。
您需要将您想要对匿名函数可用的任何内容分配给一个变量,然后use
是该变量。
推荐阅读
- python - 我们可以使用字典元素来调用函数吗?或者只是使用字典来调用它?
- android - 如何将 android studio 应用程序项目转换为 android 库
- c# - 如何在 C# 中使用 try-finally 构造?
- javascript - 如何根据日期对包含键值对的数组进行排序
- azure-data-factory - 从 HTTP 源复制到 blob 接收器时性能下降
- python - 如何使用已知的正交(相机)投影矩阵将 2d 中的后点转换为 3d?
- jmeter - jmeter可以用来负载测试原生桌面应用吗?
- angular - Angular Drag drop - 旋转元素时不向正确的方向拖动
- r - 为什么在 BoxCox 转换后我在 Shapiro Wilk 测试中得到 p 值 = NA?
- react-native - React Native Navigation:子组件未在屏幕上呈现