2 votes

Fonction pour créer une nouvelle variable précédemment indéfinie

Désolé pour un titre aussi nul, mais je n'avais vraiment pas d'idée de ce qu'il fallait mettre, j'espère que vous le comprenez. De plus, je ne sais pas si des questions similaires ont été posées auparavant, car je ne connais pas les bons mots-clés pour cela - donc je ne pourrais pas non plus le googler.

En gros... En regardant preg_match_all();, ils ont ce paramètre matches qui créera un nouvel tableau défini dans la fonction, et nous donnera la possibilité d'y accéder après l'exécution de la fonction.

Et la question est.. Comment puis-je implémenter une telle fonction dans ma propre fonction? Mais qu'elle puisse créer une seule variable et/ou un tableau.

Merci d'avance!

4voto

BoltClock Points 249668

preg_match_all() accepte une référence à un tableau, qui dans son propre contexte est appelé $matches. Comme on le voit dans le prototype de la fonction :

array &$matches

Si vous appelez la fonction et passez une variable, si elle n'existe pas déjà dans le contexte d'appel, elle sera créée. Donc dans votre fonction définie par l'utilisateur, vous acceptez un paramètre par référence en utilisant &, puis travaillez avec lui à l'intérieur de votre fonction. Créez votre variable dans un contexte extérieur en la déclarant simplement lors de l'appel de votre fonction, comme vous le faites lorsque vous appelez preg_match_all() avec $matches.

Un exemple :

function foo(&$bar) {
    $bar = 'baz';
}

// Déclarez une variable et passez-la à foo()
foo($variable);
echo $variable; // baz

3voto

Alin Purcaru Points 21373

Je pense que vous faites référence à la fonction paramètres passés par référence, n'est-ce pas?

function putValInVar(&$myVar, $myVal){
    $myVar = $myVal;
}

$myVar = 1;
putValInVar($myVar, 2);

echo $myVar; // affiche '2', mais affichera '1' si nous supprimons le '&' //

Par défaut, les arguments des fonctions en PHP sont passés par valeur. Cela signifie que de nouvelles variables sont créées à chaque appel de fonction et ces variables n'existeront que à l'intérieur de la fonction, sans affecter quoi que ce soit à l'extérieur.

Pour spécifier qu'un argument doit être utilisé par référence, la syntaxe consiste à ajouter un & avant de le déclarer dans l'en-tête de la fonction. Cela indiquera à PHP d'utiliser la variable passée à l'intérieur de la fonction plutôt que d'en créer une copie.

Exception : Les objets sont toujours passés par référence. (Enfin... Pas vraiment, mais c'est compliqué. Voir le fil de commentaires pour plus d'informations.)

2voto

mario Points 76989

Je pense que ce que vous demandez, c'est passer par référence. Ce que preg_match_all fait essentiellement pour "créer" une variable de tableau en dehors de sa portée est :

 function preg_match_all($foo, $bar, & $new_var) {
     $new_var = array(1,2,3);
 }

Le point crucial ici est le & dans la définition de la fonction. Cela vous permet de remplacer des variables dans la portée extérieure lorsqu'elles sont passées.

Stylistiquement, ceci devrait être utilisé avec précaution. Essayez de retourner des tableaux ou des résultats au lieu de le faire par passage par référence.

0voto

Pedro Cordeiro Points 101

Comme ceci :

$myvariable = runfunction();

function runfunction() {
// faire du code et attribuer le résultat à une variable (par exemple $result)
return $result;
}

Ou

global $result;
function runfunction() {
global $result;
$result = 'quelque chose';
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X