由于
我制作了这个函数,并在执行过程中发现了一个问题。我无法在子函数中获得$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);
});
}