2010-12-08 3 views
2

Désolé pour un tel titre boiteux, mais je n'avais aucune idée de ce qu'il fallait mettre là, j'espère que vous le comprenez. De plus, je n'ai aucune idée si une question similaire a déjà été posée, parce que je ne connais pas les mots-clés appropriés pour cela - donc je ne pouvais pas le google aussi.Fonction de création d'une nouvelle variable indéfinie

... Basiquement Lorsque l'on regarde preg_match_all();, ils ont obtenu ce paramètre matches qui va créer une nouvelle gamme définie en fonction, et nous donner la possibilité d'y accéder après l'exécution de la fonction.

Et la question est .. Comment puis-je mettre en œuvre une telle fonctionnalité dans ma propre fonction? Mais qu'il pourrait créer une seule variable et/ou tableau.

Merci d'avance!

Répondre

3

Je pense que vous faites référence à la fonction parameters passed by reference, n'êtes-vous pas? Par défaut, les arguments de fonction de PHP sont passés par valeur. Par défaut, les arguments de fonction sont transmis par PHP. Cela signifie que de nouvelles variables sont créées à chaque appel de fonction et que ces variables n'existent qu'à l'intérieur de la fonction, sans affecter quoi que ce soit en dehors de celle-ci.

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

Exception: les objets sont toujours transmis par référence. (Eh bien ... Pas vraiment, mais il est compliqué. Voir le fil de commentaire pour plus d'informations.)

+0

il n'est pas nécessaire de définir' $ myVar' avant d'appeler 'putValInVar()' –

+0

@kemp Bien sûr que non, mais je voulais pour mieux illustrer le changement de valeur. –

+0

+1 pour la mention * Exception * –

0

Comme ceci:

$myvariable = runfunction(); 

function runfunction() { 
//do some code assign result to variable (ie $result) 
return $result; 
} 

Ou

global $result; 
function runfunction() { 
global $result; 
$result = 'something'; 
} 
+0

Non, car 'preg_match_all()' ne retourne pas le tableau '$ matches'. – BoltClock

+0

Impossible de voir que cela pose beaucoup de problèmes avec le résultat. mais sinon le définir dans une variable globale? – Ashley

+0

Cela ne va pas le couper, c'est un comportement totalement différent de 'preg_match_all(); ... – jolt

4

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

array &$matches 

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

Un exemple:

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

// Declare a variable and pass it to foo() 
foo($variable); 
echo $variable; // baz 
2

Je pense que ce que vous demandez est passing-by-reference. Qu'est-ce preg_match_all fait essentiellement à « créer » une variable tableau en dehors de son champ d'application est:

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

Le point crucial est ici & dans la définition de la fonction. Cela vous permet d'écraser des variables dans la portée externe lorsqu'elles sont passées. Stylistiquement, ceci doit être utilisé avec précaution.Essayez de renvoyer des tableaux ou des résultats au lieu de le faire via un passage de référence.

Questions connexes