這篇文章帶大家了解php的引用,詳細介紹一下函數的引用傳遞和引用回傳。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
php的引用(就是在變數或函數、物件等前面加上&符號)
在PHP 中引用的意思是:不同的名字存取同一個變數內容。
與C語言中的指標是有差異的. C語言中的指標裡面儲存的是變數的內容,在記憶體中存放的位址。
1.變數的引用
PHP 的引用允許你用兩個變數來指向同一個內容
<?php $a = 'abc'; $b = &$a; var_dump($a,$b);//均为'abc' $b = 123; var_dump($a,$b);//均为123
2.函數的引用傳遞(傳址呼叫)
<?php function test(&$a){ $a = $a + 100; } $b = 1; test($b); var_dump($b);//101
這裡$b傳遞給函數的其實是$b的變數內容所處的記憶體位址,透過在函數裡改變$a的值就可以改變$b的值
注意:
上面的「 test($b); 」中的$b前面不要加上& 符號,但在函數在「call_user_func_array」中,若要引用傳參,就得需要& 符號
<?php function test(&$a){ $a = $a + 10; } $b = 1; call_user_func_array('test',array(&$b)); var_dump($b);//11
3.函數的引用回傳
function &test() { static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } $a=test();//这条语句会输出 $b的值 为1 $a=5; $a=test();//这条语句会输出 $b的值 为2 $a=&test();//这条语句会输出 $b的值 为3 $a=5; $a=test();//这条语句会输出 $b的值 为6
以此方式$ a=test();得到的其實不是函數的參考返回,這跟普通的函數呼叫沒有差別。 $a=test()方式呼叫函數,只是將函數的值賦給$a而已,而$a做任何改變都不會影響到函數中的$b而透過$a=&test()方式呼叫函數呢,他的作用是將return $b中的$b變數的記憶體位址與$a變數的記憶體位址指向了同一個地方。
這裡是為了讓大家理解函數的引用返回才使用靜態變數的,其實函數的引用傳回多用在物件中:
class talker{ private $data = 'Hi'; public function &get(){ return $this->data; } public function out(){ echo $this->data; } } $aa = new talker(); $d = &$aa->get(); $aa->out(); $d = 'How'; $aa->out(); $d = 'Are'; $aa->out(); $d = 'You'; $aa->out(); //输出为HiHowAreYou
推薦學習:《PHP影片教學》
以上是詳解php中函數的引用傳遞與傳回 (附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!