說說php引用的那些事
阿新 • • 發佈:2019-01-31
許多語言都有引用,運用好引用,給程式設計帶來不一樣的風采
一,變數的應用
$a="ABC";
$b =&$a;
echo $a;//這裡輸出:ABC
echo $b;//這裡輸出:ABC
$b="EFG";
echo $a;//這裡$a的值變為EFG 所以輸出EFG
echo $b;//這裡輸出EFG
其實變數的引用容易和指標混淆,指標是存放著變數的地址,而引用則是變數的內容
二,函式的引用傳遞
這個原理就跟上面變數引用一樣,$test = &$val 那麼val就是test的引用,改變val的值就能改變test的值function my(&$val){ $val = 'hi'; } $test = "hello"; my($test); echo $test; 輸出 hi
在這裡我們看到函式在呼叫傳參時並無使用&$test,因為一使用就報錯了,那你可以想象一下這是為什麼呢?
但在下面這個例子中,卻可以
function a(&$b){
$b++;
}
$c=0;
call_user_func_array('a',array(&$c));
echo $c;
//輸出 1
?>
原因是這個call_user_func_array()函式,可以在官網查詢
三,函式return
通過這種方式$a=test();
得到的其實不是函式的引用返回,這跟普通的函式呼叫沒有區別
至於原因: 這是PHP的規定PHP規定通過$a=&test(); 方式得到的才是函式的引用返回
至於什麼是引用返回呢(PHP手冊上說:引用返回用在當想用函式找到引用應該被繫結在哪一個變數上面時。) 這句狗屁話 害我半天沒看懂
用上面的例子來解釋就是
$a=test()方式呼叫函式,只是將函式的值賦給$a而已, 而$a做任何改變 都不會影響到函式中的$b
而通過$a=&test()方式呼叫函式呢, 他的作用是 將return $b中的 $b變數的記憶體地址與$a變數的記憶體地址 指向了同一個地方
即產生了相當於這樣的效果($a=&$b;) 所以改變$a的值 也同時改變了$b的值 所以在執行了
$a=&test();
$a=5;
以後,$b的值變為了5
這裡是為了讓大家理解函式的引用返回才使用靜態變數的,其實函式的引用返回多用在物件中