2009-05-22 36 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沒有這樣的瓶蓋。

目錄名(FILE

此函數返回字符串。

$ anotherVariable = $文件;

給$ anotherVariable相同的字符串值。

所以我相信回答你的問題是「不」,它不會每次執行。

+0

關閉可能是錯誤的,但php的功能不是一流的公民 – catsby 2009-05-22 13:45:34

1

沒有在任何情況下。

PHP的功能都沒有標識其指向類函數的實例,你可以在Java,ActionScript中,javascript等等看......這就是爲什麼你不能存儲鏈接本身的功能給一個變量。這就是爲什麼每次你調用函數的時候,它都和你包含()一個腳本一樣。當然有差異,但在這個問題的背景下,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函數都會執行?

不,它不。因爲執行只能通過()完成。否() =沒有執行。

相關問題