PHP引用傳值

php引用

. php中引用的用法:php

  1. 變量的引用賦值: $a = &$bhtml

  2. 函數調用時的引用參數傳遞數組

    1. 早期php是在調用時經過&符號傳遞引用類型的變量, 好比: func(&$arg);函數

    2. 後來, 函數的引用類型參數被規定爲須要在函數聲明時定義, 不如: 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 )

4 對象數據類型傳值

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>

http://www.phpfensi.com/php/20140220/1612.html

相關文章
相關標籤/搜索