我正在尝试从父子元素数组创建一个路径.
我们的想法是编写一个递归函数,该函数使用路径中包含的所有元素按顺序填充数组.
为了使我的递归函数起作用,我必须在全局范围内定义几个变量.
这是它的样子:
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’关键字而不是globals:
function buildBreadcrumbs($elements,$parentID) use($siteroot,$breadcrumbs,$navigation){ if($siteroot['id'] === $parentID){ $nav = array_values($navigation); array_unshift($breadcrumbs,'id' => $nav[0]['id'])); } else { foreach ($elements as $element) { if ($element['id'] === $parentID) { array_unshift($breadcrumbs,'id' => $element['id'])); buildBreadcrumbs($elements,$element['parent'][0]); } } } }
但这给了我语法错误:
PHP Parse error: Syntax error,unexpected T_USE,expecting '{'
我在这做错了什么?
为什么$breadcrumbs必须首先是全局的,所以函数可以使用它?
解决方法
如果您的变量都只在此类中使用,则可以使用$this关键字.
例:
private $breadcrumbs = array(); private $siteroot; private $navigation; function buildBreadcrumbs($elements,$parentID){ if($this->siteroot['id'] === $parentID){ $nav = array_values($this->navigation); array_unshift($this->breadcrumbs,'id' => $nav[0]['id'])); } else { foreach ($elements as $element) { if ($element['id'] === $parentID) { array_unshift($this->breadcrumbs,$element['parent'][0]); } } } }
如果它们是真正的全局变量,那么您必须将它们用作全局变量.或者在此之后创建一个函数,用您的类变量(使用$this关键字更新)更新全局变量.