【发布时间】:2017-12-04 15:31:13
【问题描述】:
我正在尝试从父子元素数组创建路径。
这个想法是编写一个递归函数,它用路径包含的所有元素按顺序填充一个数组。
我的问题在于 PHP 中的闭包:
为了让我的递归函数工作,我必须在全局范围内定义几个变量。
看起来是这样的:
global $breadcrumbs;
$breadcrumbs = array();
function buildBreadcrumbs($elements, $parentID){
global $siteroot;
global $breadcrumbs;
global $navigation;
if($siteroot['id'] === $parentID){
$nav = array_values($navigation);
array_unshift($breadcrumbs, array('label' => 'Start', 'id' => $nav[0]['id']));
} else {
foreach ($elements as $element) {
if ($element['id'] === $parentID) {
array_unshift($breadcrumbs, array('label' => $element['navlabel'], 'id' => $element['id']));
buildBreadcrumbs($elements, $element['parent'][0]);
}
}
}
}
我尝试以这种方式使用 'use' 关键字而不是全局变量:
function buildBreadcrumbs($elements, $parentID) use($siteroot, $breadcrumbs, $navigation){
if($siteroot['id'] === $parentID){
$nav = array_values($navigation);
array_unshift($breadcrumbs, array('label' => 'Start', 'id' => $nav[0]['id']));
} else {
foreach ($elements as $element) {
if ($element['id'] === $parentID) {
array_unshift($breadcrumbs, array('label' => $element['navlabel'], 'id' => $element['id']));
buildBreadcrumbs($elements, $element['parent'][0]);
}
}
}
}
但这给了我语法错误:
PHP Parse error: syntax error, unexpected T_USE, expecting '{'
我在这里做错了什么?
为什么$breadcrumbs 首先必须是全局的,这样函数才能使用它?
【问题讨论】:
-
该函数是其自身的局部变量,它无法访问外部变量,除非您选择向其添加参数。这就是它无法访问
$breadcrumbs的原因——因为它超出了范围 -
为什么不将变量传递给函数?