php – 为什么我不能在非匿名函数中使用’use’?
发布时间:2020-12-13 22:28:03 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试从父子元素数组创建一个路径. 我们的想法是编写一个递归函数,该函数使用路径中包含的所有元素按顺序填充数组. 我的问题是在PHP中关闭: 为了使我的递归函数起作用,我必须在全局范围内定义几个变量. 这是它的样子: global $breadcrumbs;$breadcrum
我正在尝试从父子元素数组创建一个路径.
我们的想法是编写一个递归函数,该函数使用路径中包含的所有元素按顺序填充数组. 我的问题是在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’关键字而不是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关键字更新)更新全局变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |