2009年6月3日 星期三

[php&符號( 引用)的方法

引用此篇文章

php中在變量、函數前都可以使用&符號來實現引用(References),也就是意味著在程序中使用不用的變量名稱訪問同一個數據內容。很多php開發者都對引用的概念認識不深,包括我自己。今天我自己結合php手冊,做了一些php引用的例子加強自己對引用的理解。


<?php

/*

php 引用學習實例 編寫者:朦朧中的罪惡
http://blog.ourcomic.cn

*/
//變量的引用 例子1
$a = 'haha';
$b =& $a; //此時$a和$b都是同一個內存地址即同樣的值
$b = 'heihei';
print $a; //輸出為 heihei

print "<br>";
//變量的引用 例子2
$ref = 0;
$row =& $ref;
foreach (array(1, 2, 3) as $row) { //循環時$row獲得值同時改變$ref的值

}
print $ref; // 輸出3 - 數組的最後一位

print "<br>";

//函數參數引用測試
$a = 5;
test($a);
print $a; //輸出為6

function test(&$var) {
$var++; //這裡的$var指向的是傳入的$a本身,而不是$a的拷貝,修改它就是修改$a的值
}

print "<br>";

[break]

$a = 5;
test2($a);
print $a; //輸出還是為5值未修改

function test2($var) {
$var++; //這裡的$var指向的是傳入的$a的拷貝,修改它的值不會影響到$a的值
}

print "<br>";

//數組引用測試

$somearray = array('1','2','3');
foreach ($somearray as &$i) {
$i++; //此時$somearray每個索引的值都加上1,$i就是$somearray索引而不是其拷貝,每個索引的值+1
}

foreach($somearray as $h) {
print $h; //輸出234,$h是$somearray拷貝
$h++; //此時$h++對$somearray毫無影響
}
print "<br>";

foreach($somearray as $j) {
print $j; //還是輸出234,$somearray的值並未改變
}
print "<br>";

//類測試
class test {
public $num;
public function setNum(&$newnum) {
$this->num =& $newnum;
}
}

$a = 0;
$test = new test();
$test->setNum($a);
print $test->num; //此時test類的屬性$num引用的是$a;
print "<br>";
$a++; //$a+1也就意味著$test->num+1
print $test->num;//輸出1

print "<br>";

//類測試2
class foo {
public $value = 42;

public function &getValue() {
return $this->value;
}
}

$obj = new foo();
$myValue = &$obj->getValue(); // $myValue引用的就是對象的value屬性.
$obj->value = 2;
print $myValue; // 輸出2

//引用綁定註銷
$a = 1;
$b =& $a;
unset($a); //$a完蛋了 但是$b還在
?>

【下列文章您可能也有興趣】

沒有留言: