我有这个类(例如简单的一个):
<?
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参数访问$ a而不将它传递给$ gen()函数?
答案 0 :(得分:2)
您错过了use
声明。关于闭包的PHP documentation,请参阅第3个示例。
这将有效:
<?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);
答案 1 :(得分:2)
PHP中的匿名函数没有JavaScript那样的隐式变量作用域,因此您需要指定需要父作用域中的哪些变量。您可以使用use
语法执行此操作:
$var = 123;
$fn = function() use ($var) {
// you can use $var here
}
$fn();
另请参阅:Closures and scoping