我有这个类(举个简单的例子):
<?
class Test {
public function test1($a) {
$gen = function() {
$gen = function() {
global $a; // no effect
echo 'a='. $a; // how could i access $a from test1 parameter without passing?
};
$gen();
};
$gen();
}
};
$x = new Test();
$x->test1(123);
有没有一种方法可以从上一个$gen函数中的test1 paramter访问$a,而不将其传递给$gen()函数?
PHP中的匿名函数不像JavaScript那样具有隐式变量作用域,因此需要指定需要父作用域中的哪些变量。使用use
语法:
$var = 123;
$fn = function() use ($var) {
// you can use $var here
}
$fn();
另请参阅:闭包和范围
您缺少use
语句。请参阅PHP关于闭包的文档中的第三个示例。
这将起作用:
<?php
class Test {
public function test1($a) {
$gen = function() use ($a) {
$gen = function() use($a) {
echo 'a='. $a; // how could i access $a from test1 parameter without passing?
};
$gen();
};
$gen();
}
};
$x = new Test();
$x->test1(123);