我无法将函数中的变量作为变量访问:
public function fetchWhere($params) {
$resultSet = $this->select(function(Select $select) {
$select->where($params);
});
..
我收到错误:
Undefined variable: params
答案 0 :(得分:3)
然后你需要compile ‘org.bytedeco:javacv:+’
compile group: ‘org.bytedeco.javacpp-presets’, name: ‘opencv’, version: ‘2.4.10–0.10', classifier: ‘android-arm’
compile group: ‘org.bytedeco.javacpp-presets’, name: ‘ffmpeg’, version: ‘2.5.1–0.10', classifier: ‘android-arm’
构造来使变量在函数内可用/可见:
use
你可以传递更多的变量。只需使用逗号public function fetchWhere($params) {
$resultSet = $this->select(function(Select $select) use($params) {
$select->where($params);
});
}
分隔其他变量,例如,
。
答案 1 :(得分:2)
闭包还可以从父作用域继承变量。必须将任何此类变量传递给use语言构造。 这是因为范围可变。试试 -
$resultSet = $this->select(function(Select $select) use($params) {
$select->where($params);
});
从父作用域继承变量与使用全局变量不同。全局变量存在于全局范围内,无论执行什么功能,它都是相同的。闭包的父作用域是声明闭包的函数(不一定是从中调用它的函数)。
答案 2 :(得分:1)
使用“use”,可以将变量用作范围中的全局变量:
public function fetchWhere($params) {
$resultSet = $this->select(function(Select $select) use($params) {
$select->where($params);
});
..