子函数中的acess变量



我制作了这个函数,并在执行过程中发现了一个问题。我无法在子函数中获得$names_from_source的结果。没有错误,它检测到变量,但其值始终为NULL。

/*
source: array of MyObject
copy: array of MyObject
return: return duplicated objects based on name
*/
function get_all_duplicated($source, $copy) {
$names_from_source = array_map(fn($obj): string => $obj->name, $source);
var_dump($names_from_source); // return list of names
return array_filter($copy, function($obj) {
global $names_from_source;
var_dump($names_from_source); // return NULL
return in_array($obj->name, $names_from_source);
});
}

为什么?感谢

由于$names_from_source不是全局变量,因此无法使用

global。它是来自父函数的局部变量。

要在子函数中调用它,我必须使用术语use

/*
source: array of MyObject
copy: array of MyObject
return: return duplicated objects based on name
*/
function get_all_duplicated($source, $copy) {
$names_from_source = array_map(fn($obj): string => $obj->name, $source);
var_dump($names_from_source); // return list of names
return array_filter($copy, function($obj) use($names_from_source) {
return in_array($obj->name, $names_from_source);
});
}

最新更新