2009-05-22 3 views
6

Ok, je ne savais pas vraiment comment formuler la question, mais laissez-moi vous expliquer.Comment php exécute une fonction affectée à une variable?

Supposons que j'ai une variable:

$file = dirname(__FILE__); 

Ce qui se passe si je cède $file à une autre variable?

$anotherVariable = $file; 

Est-ce que la fonction dirname est exécutée chaque fois que j'assigne?

Merci pour toute aide.

Répondre

12

Non PHP est impératif, donc le côté droit des expressions d'affectation est évalué, et le résultat stocké "dans le" côté gauche (dans le cas simple et presque omniprésent, la variable nommée sur la main gauche côté).

$a = $b; // Find the value of $b, and copy it into the value of $a 
$a = 5 + 2; // Evaulate 5 + 2 to get 7, and store this in $a 
$a = funcName(); // Evaluate funcName, which is equivalent to executing the code and obtaining the return value. Copy this value into $a 

Cela devient un peu quand vous attribuez par référence plus complexe ($ a = b & $), mais nous avons besoin de vous inquiétez pas à ce sujet pour l'instant.

2

PHP n'a pas de fermetures comme ça.

dirname (FICHIER)

cette fonction retourne une chaîne.

$ anotherVariable = $ file;

donne à $ anotherVariable la même valeur de chaîne. Donc, je crois que la réponse à votre question est "non", elle n'est pas exécutée à chaque fois.

+0

La fermeture peut être le mauvais terme, mais les fonctions PHP ne sont pas des citoyens de première classe – catsby

1

Non dans tous les cas.

Les fonctions de PHP ne sont pas des identificateurs qui pointent vers une instance de classe Function comme vous pouvez le voir en Java, ActionScript, JavaScript etc ... C'est pourquoi vous ne pouvez pas stocker un lien pour fonctionner lui-même. C'est pourquoi chaque fois que vous appelez la fonction, elle est identique à celle que vous avez incluse() dans un script à exécuter. Bien sûr, il existe des différences, mais dans le contexte de cette question, y compris avec include() et l'appel d'une fonction sont presque identiques.

Ne pas confondre avec cette affaire

function myFunc() {return 'hello world';} 
$func = 'myFunc'; 
$a = $func(); 
echo $a; // hello world 

Lisez à propos de ce cas here Ce comportement est spécial pour PHP. Je ne suis pas sûr d'autres langues - peut-être quelque part il y a peu. semblable à ceci, mais je ne l'ai jamais rencontré.

2

Réponse à la question principale:

$a = function(){ echo "Hello!"; }; 
$a(); 

Réponses aux questions mineures:

$file = dirname(__FILE__); 
//means: 
//"Evaluate/Execute function dirname() and store its return value in variable $file" 

Qu'advient-il si j'attribue $ fichier à une autre variable?

Si nous parlons d'affectation régulière ($anotherVariable = $file;), il
seulement copie la valeur$file-$anotherVariable deux sont des variables indépendantes.

La fonction dirname est-elle exécutée chaque fois que j'assigne?

Non, ce n'est pas le cas. Parce que l'exécution est effectuée uniquement avec (). Non () = Aucune exécution.

Questions connexes