2009-05-22 16 views
6

わかりました。私は本当に質問をどのようにフレーズするかわかりませんでしたが、私に説明しましょう。PHPはどのように変数に割り当てられた関数を実行しますか?

$file = dirname(__FILE__); 

私は別の変数に$fileを割り当てた場合どうなりますか:

は、私は、変数があると?

$anotherVariable = $file; 

dirname機能は、私が割り当てるたびに実行されますでしょうか?

ありがとうございました。

答えて

12

いいえ、PHPは必須であるため、代入式の右辺はと評価され、結果は左辺に格納されます(単純でほとんど遍在するケースでは、左辺に名前が付けられた変数側)。

$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 

あなたが参照して割り当てるときにこれは($ A = & $ b)はもう少し複雑になりますが、私たちは今のところ心配する必要はありません。

2

PHPにはこのようなクロージャがありません。

DIRNAME(FILE

この関数は、文字列を返します。

$ anotherVariable = $ file;

は、同じ文字列値の$ anotherVariableを与えます。

私はあなたの質問に対する答えは「いいえ」と考えています。毎回実行されるわけではありません。

+0

閉鎖は間違った用語かもしれませんが、PHP関数はファーストクラスの市民ではありません – catsby

1

いずれにしても、

PHPの関数は、Java、ActionScript、JavaScriptなどで見られるように、Functionクラスのインスタンスを指す識別子ではありません。そのため、関数自体へのリンクを変数に格納することはできません。そのため、あなたが実行するスクリプトをinclude()するのと同じように、関数を呼び出すときはいつも同じです。確かに違いがありますが、include()と関数の呼び出しを含むこの質問の文脈では、ほとんど同じです。

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

読むこの場合と混同してはいけない。この場合hereについてこの動作は、PHPのための特別です。他の言語についてはわかりません。これに似ていますが、私は一度も会ったことがありません。主な質問へ

2

回答:マイナーな質問へ

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

回答:私は別の変数に$ファイルを割り当てる場合はどうなります

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

我々は通常の代入($anotherVariable = $file;)の話をしている場合は、
それだけコピー$fileから$anotherVariable両方に値は独立変数です。

割り当てるたびにdirname関数が実行されますか?

いいえ。実行は()でのみ実行されるためです。いいえ() =実行しません。

関連する問題