我来自JS世界,无法理解这段代码:
function getCountryName($code, $codes){
print_r($code);
array_filter(
$codes,
function ($e) {
if($e->cca2 == $code){
print_r($e->name->common);
}
}
);
}
第二行仅用于调试,它打印给定$ code。但是这里:if($e->cca2 == $code){
$ code似乎未定义。怎么可能呢?它适用于$GLOBALS['code']
,但我不想使用全局变量。为什么array_filter无权访问它自己的范围?
答案 0 :(得分:2)
$code
位于getCountryName()
的范围内。然后,您有array_filter()
的回调,这是一个匿名函数,并且有自己的范围。要访问变量,您需要use
它,这将使回调从其父作用域(函数)继承变量:
function getCountryName($code, $codes){
print_r($code);
array_filter(
$codes,
function ($e) use ($code) {
if($e->cca2 == $code){
print_r($e->name->common);
}
}
);
}
答案 1 :(得分:1)
你需要使用'使用'。
function getCountryName($code, $codes){
print_r($code);
array_filter(
$codes,
function ($e) use($code) {
if($e->cca2 == $code){
print_r($e->name->common);
}
}
);
}
答案 2 :(得分:1)
因为function()
创建了自己的范围。如果要将变量从外部传递到内部范围,可以使用use
:
array_filter(
$codes,
function ($e) use ($code) {
if($e->cca2 == $code){
print_r($e->name->common);
}
}
);
这样,来自外部范围的变量的使用是明确的。