. php中引用的用法:php
變量的引用賦值: $a = &$bhtml
函數調用時的引用參數傳遞數組
早期php是在調用時經過&符號傳遞引用類型的變量, 好比: func(&$arg);函數
後來, 函數的引用類型參數被規定爲須要在函數聲明時定義, 不如: function func(&$arg);code
注:引用聲明時定義引用類型參數後,運行時引用參數傳遞被廢棄,須要在php.ini中增長allow_call_time_pass_reference來開啓.htm
##1..函數返回引用類型, 這種應用方式須要聲明函數時,在函數名前增長&符號,而且,在調用時,要用引用賦值方式 , 實例代碼以下:對象
dmeo1get
function &func() { return $a; } $a = func(); //這種調用方式獲得的不是引用傳值 $a =& func(); //這樣調用纔是引用傳值
簡而言之,就是讓函數的返回一個引用類型的值,一個更實際的例子,代碼以下:io
demo2function
$a = 1; function &func(&$a) { return $a; } $b = func($a); $c =& func($a); $b = 2;
echo $a; echo $b; echo $c; //輸出a: 1, b: 2, c: 1. //可見對$b的修改不會影響$a
demo3
$c = 3; echo "a: $a, b: $b, c: $c. <br />/n"; //輸出a: 3, b: 2, c: 3. //可見對$c的修改會影響$a
php函數傳值的幾個細節,以下:
##2. 基本數據類型的傳值
demo1
function testvar($k){ $k = 40; } $c = 30; //給一個函數參數傳一個基本數據類型(整型,布爾,字符 ...), 實際上傳的就是值 ; testvar($c); //變量複製一份傳到函數中 echo $c;//結果是:30
demo2
function testvar2(&$k){ $k = 40; } $e = 30; //給一個函數參數傳一個基本數據類型(整型,布爾,字符 ...), 實際上傳的y就是地址(把地址傳過去了) ; //外部變量的地址傳遞進函數裏面去了,裏面的改變影響外面的改變 testvar2($e); echo $e;//結果是:40
##3 數組(默認狀況下是複製一份數據),如要傳地址則&$arr.
demo1
$arr1 = array(-1,5,0); function testArr($arr){ for($i=0;$i<count ($arr);$i++){ for($j=$i+1;$j<count($arr);$j++){ if($arr[$i]>$arr[$j]){ $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } print_r($arr); //結果:Array ( [0] => -1 [1] => 0 [2] => 5 ) //複製一份數組傳進來,內部改變不影響外部的 } testArr($arr1); print_r($arr1); //結果:Array ( [0] => -1 [1] => 5 [2] => 0 ) //數組沒有改變
dmeo2
function testArr2(&$arr){ //傳進來的是引用地址,內部會改變外部的 for($i=0;$i</count><count ($arr);$i++){ for($j=$i+1;$j<count($arr);$j++){ if($arr[$i]>$arr[$j]){ $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } } testArr($arr1); print_r($arr1); //結果:Array ( [0] => -1 [1] => 0 [2] => 5 )
class person{ public $name; public $age; } $a = new person(); $a->name = '小明'; $a->age = '20'; //變量a在存的是對象的地址,把a賦給b這個變量,實際上就是賦了一個地址。 $b = $a; $b->age = 30; //echo $a->age.$b->age;//結果是:30 30 //給一個函數參數傳一個對象, 實際上傳的是這個對象的地址; function test($k){ $k->age =40; } //調用 test($b); //echo $a->age.$b->age;//結果是:40 40 </count>