php use not allowed,php – 为什么我不能在非匿名函数中使用’use’?

我正在尝试从父子元素数组创建一个路径.

我们的想法是编写一个递归函数,该函数使用路径中包含的所有元素按顺序填充数组.

我的问题是在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, 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必须首先是全局的,所以函数可以使用它?

解决方法:

如果您的变量都只在此类中使用,则可以使用$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, array('label' => 'Start', 'id' => $nav[0]['id']));

} else {

foreach ($elements as $element) {

if ($element['id'] === $parentID) {

array_unshift($this->breadcrumbs, array('label' => $element['navlabel'], 'id' => $element['id']));

buildBreadcrumbs($elements, $element['parent'][0]);

}

}

}

}

如果它们是真正的全局变量,那么您必须将它们用作全局变量.或者在此之后创建一个函数,用您的类变量(使用$this关键字更新)更新全局变量.

标签:php,closures,recursion

来源: https://codeday.me/bug/20190710/1427538.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值