2009-05-22 15 views
6

Ok, non sapevo davvero nemmeno come esprimere la domanda, ma lasciatemi spiegare.In che modo PHP esegue una funzione assegnata alla variabile?

Supponiamo che io sono una variabile:

$file = dirname(__FILE__); 

Cosa succede se assegno $file ad un'altra variabile?

$anotherVariable = $file; 

La funzione dirname viene eseguita ogni volta che si assegna?

Grazie per qualsiasi aiuto.

risposta

12

No. PHP è imperativo, quindi la parte destra delle espressioni di assegnazione è valutata e il risultato memorizzato "nella parte sinistra" (nel caso semplice e quasi ubiquitario, la variabile denominata sulla mano sinistra lato).

$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 

Questo diventa un po 'più complessa quando si assegna per riferimento ($ a = $ & b), ma non è necessario preoccuparsi che per ora.

2

PHP non ha chiusure del genere.

dirname (FILE)

questa funzione restituisce una stringa.

$ anotherVariable = $ file;

fornisce a $ anotherVariable lo stesso valore di stringa.

quindi credo che la risposta alla tua domanda sia "no", non viene eseguita ogni volta.

+0

La chiusura può essere il termine sbagliato, ma le funzioni di php non sono cittadini di prima classe – catsby

1

No in ogni caso.

Le funzioni di PHP non sono identificatori che puntano all'istanza della classe Function come è possibile vedere in Java, ActionScript, JavaScript ecc. Ecco perché non è possibile memorizzare un collegamento per funzionare da solo a una variabile. Ecco perché ogni volta che chiami la funzione è in comune lo stesso che includi() uno script da eseguire. Certo ci sono delle differenze, ma nel contesto di questa domanda includendo include() e chiamando una funzione sono quasi identici.

Non essere confuso con questo caso

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

Leggi su questo caso here Questo comportamento è speciale per PHP. Non sono sicuro di altre lingue, forse c'è qualcosa di smunto. simile a questo, ma non l'ho mai incontrato.

2

risposta alla domanda principale:

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

Le risposte alle domande minori:

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

Cosa succede se assegno $ file in un'altra variabile?

Se stiamo parlando di assegnazione regolare ($anotherVariable = $file;),
esso diventa subito copia il valore$file-$anotherVariable entrambi sono variabili indipendenti.

La funzione dirname viene eseguita ogni volta che si assegna?

No, non è così. Perché l'esecuzione viene eseguita solo con (). No () = Nessuna esecuzione.

Problemi correlati