J'essaie de créer un chemin à partir d'un tableau d'éléments parent-enfant.Pourquoi ne puis-je pas utiliser 'use' dans des fonctions non anonymes?
L'idée était d'écrire une fonction récursive, qui remplit un tableau avec tous les éléments que le chemin contient dans l'ordre.
Mon problème est avec fermeture en PHP:
Pour ma fonction récursive au travail, je devais définir plusieurs variables dans la portée globale.
Voici comment il ressemble:
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]);
}
}
}
}
J'ai essayé d'utiliser le mot-clé 'utilisation' au lieu de GLOBALS ainsi:
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]);
}
}
}
}
Mais cela me donne erreur de syntaxe:
PHP Parse error: syntax error, unexpected T_USE, expecting '{'
Qu'est-ce que je fais mal ici?
Pourquoi est-ce que $breadcrumbs
doit être global en premier lieu afin que la fonction puisse l'utiliser?
la fonction est locale à lui-même, il n'a pas accès à des variables en dehors de celui-ci, à moins que vous choisissez d'ajouter un paramètre à lui. C'est pourquoi il n'a pas accès à '$ breadcrumbs '- parce qu'il est hors de portée – ThisGuyHasTwoThumbs
Pourquoi ne passez-vous pas les variables dans la fonction? – AbraCadaver