function parts($part) {
$structure = 'http://' . $site_url . 'content/';
echo($tructure . $part . '.php');
}
Cette fonction utilise une variable $site_url
qui a été défini en haut de cette page, mais cette variable n'est pas transmise à la fonction.
Comment le faire revenir dans la fonction?
Ajouter un deuxième paramètre
Vous devez passer un paramètre supplémentaire à votre fonction:
function parts($site_url, $part) {
$structure = 'http://' . $site_url . 'content/';
echo $structure . $part . '.php';
}
En cas de fermeture
Si vous préférez utiliser des fermetures, vous pouvez importer une variable dans la portée actuelle (le mot clé use
):
$parts = function($part) use ($site_url) {
$structure = 'http://' . $site_url . 'content/';
echo $structure . $part . '.php';
};
global
- une mauvaise pratique
Ce message est fréquemment lu, donc quelque chose doit être clarifié à propos de global
. Son utilisation est considérée comme une mauvaise pratique (voir this et this ).
Par souci d'exhaustivité, voici la solution utilisant global
:
function parts($part) {
global $site_url;
$structure = 'http://' . $site_url . 'content/';
echo($structure . $part . '.php');
}
Cela fonctionne parce que vous devez dire à l'interpréteur que vous voulez utiliser une variable globale, maintenant c'est pense c'est une variable locale (dans votre fonction).
Lecture suggérée:
Vous pouvez également importer des variables de la portée externe en utilisant des fermetures avec le mot clé use
.
$myVar = "foo";
$myFunction = function($arg1, $arg2) use ($myVar)
{
return $arg1 . $myVar . $arg2;
};
N'oubliez pas que vous pouvez également transmettre ces variables use
par référence.
Les cas d'utilisation sont lorsque vous devez modifier la variable use
'd depuis l'intérieur de votre rappel (par exemple, produire le nouveau tableau d'objets différents à partir d'un tableau source d'objets).
$sourcearray = [ (object) ['a' => 1], (object) ['a' => 2]];
$newarray = [];
array_walk($sourcearray, function ($item) use (&$newarray) {
$newarray[] = (object) ['times2' => $item->a * 2];
});
var_dump($newarray);
À présent $newarray
comprendra (pseudocode ici par souci de concision)[{times2:2},{times2:4}]
.
Au contraire, en utilisant $newarray
sans &
le modificateur rendrait l'extérieur $newarray
variable être accessible en lecture seule depuis la portée de fermeture. Mais $newarray
dans le périmètre de fermeture serait une variable nouvellement créée complètement différente vivant uniquement dans le périmètre de fermeture.
Bien que les noms des deux variables soient les mêmes, il s'agirait de deux variables différentes. L'extérieur $newarray
la variable comprendrait []
dans ce cas une fois le code terminé.
Mettez simplement la fonction en utilisant le mot-clé GLOBAL:
global $site_url;