比如:
<? php$a = 'c' ;
$b = & $a ; //表示$b 和 $a 引用了同乙個變數
$a = 'abc' ; //這裡重置了$a
echo $b ; //將輸出abc
unset( $a ); //取消引用
echo $b ; //這裡仍輸出 abc
$a = 'abcd' ;
echo $b ; //因為已經取消引用 這裡仍輸出abc
?>
$a = &$b;
看手冊第15章:
引用是什麼
在 php 中引用意味著用不同的名字訪問同乙個變數內容。這並不像 c 的指標,它們是符號表別名。注意在 php 中,變數名和變數內容是不一樣的,因此同樣的內容可以有不同的名字。最接近的比喻是 unix 的檔名和檔案本身 - 變數名是目錄條目,而變數內容則是檔案本身。引用可以被看作是 unix 檔案系統中的緊密連線。
引用做什麼
php 的引用允許你用兩個變數來指向同乙個內容。意思是,當你這樣做時:
<?php$a =& $b
?>
這意味著 $a 和 $b 指向了同乙個變數。
注: $a 和 $b 在這裡是完全相同的,這並不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同乙個地方。
同樣的語法可以用在函式中,它返回引用,以及用在 new 運算子中(php 4.0.4 以及以後版本):
<?php$bar =& new fooclass();
$foo =& find_var ($bar);
?>
注: 不用 & 運算子導致物件生成了乙個拷貝。如果你在類中用 $this,它將作用於該類當前的例項。沒有用 & 的賦值將拷貝這個例項(例如物件)並且 $this 將作用於這個拷貝上,這並不總是想要的結果。由於效能和記憶體消耗的問題,通常你只想工作在乙個例項上面。
儘管你可以用 @ 運算子來關閉建構函式中的任何錯誤資訊,例如用 @new,但用 &new 語句時這不起效果。這是 zend 引擎的乙個限制並且會導致乙個解析錯誤。
引用做的第二件事是用引用傳遞變數。這是通過在函式內建立乙個本地變數並且該變數在呼叫範圍內引用了同乙個內容來實現的。例如:
<?phpfunction foo (&$var)
$a=5;
foo ($a);
?>
將使 $a 變成 6。這是因為在 foo 函式中變數 $var 指向了和 $a 指向的同乙個內容。更多詳細解釋見引用傳遞。
引用做的第三件事是引用返回。
引用不是什麼
如前所述,引用不是指標。這意味著下面的結構不會產生你預期的效果:
<?phpfunction foo (&$var)
foo($bar);
?>
這將使 foo 函式中的 $var 變數在函式呼叫時和 $bar 繫結在一起,但接著又被重新繫結到了 $globals["baz"] 上面。不可能通過引用機制將 $bar 在函式呼叫範圍內繫結到別的變數上面,因為在函式 foo 中並沒有變數 $bar(它被表示為 $var,但是 $var 只有變數內容而沒有呼叫符號表中的名字到值的繫結)。
引用傳遞
你可以將乙個變數通過引用傳遞給函式,這樣該函式就可以修改其引數的值。語法如下:
<?phpfunction foo (&$var)
$a=5;
foo ($a);
// $a is 6 here
?>
注意在函式呼叫時沒有引用符號 - 只有函式定義中有。光是函式定義就足夠使引數通過引用來正確傳遞了。
以下內容可以通過引用傳遞:
變數,例如 foo($a)
new 語句,例如 foo(new foobar())
從函式中返回的引用,例如:
<?phpfunction &bar()
foo(bar());
?>
詳細解釋見引用返回。
任何其它表示式都不能通過引用傳遞,結果未定義。例如下面引用傳遞的例子是無效的:
<?phpfunction bar() // note the missing &
foo(bar());
foo($a = 5) // 表示式,不是變數
foo(5) // 常量,不是變數
?>
這些條件是 php 4.0.4 以及以後版本有的。
引用返回
引用返回用在當你想用函式找到引用應該被繫結在哪乙個變數上面時。當返回引用時,使用此語法:
<?phpfunction &find_var ($param)
$foo =& find_var ($bar);
$foo->x = 2;
?>
本例中 find_var 函式所返回的物件的屬性將被設定(譯者:指的是 $foo->x = 2; 語句),而不是拷貝,就和沒有用引用語法一樣。
注: 和引數傳遞不同,這裡必須在兩個地方都用 & 符號 - 來指出返回的是乙個引用,而不是通常的乙個拷貝,同樣也指出 $foo 是作為引用的繫結,而不是通常的賦值。
取消引用
當你 unset 乙個引用,只是斷開了變數名和變數內容之間的繫結。這並不意味著變數內容被銷毀了。例如:
<?php$a = 1;
$b =& $a;
unset ($a);
?>
不會 unset $b,只是 $a。
再拿這個和 unix 的 unlink 呼叫來模擬一下可能有助於理解。
引用定位
許多 php 的語法結構是通過引用機制實現的,所以上述有關引用繫結的一切也都適用於這些結構。一些結構,例如引用傳遞和返回,已經在上面提到了。其它使用引用的結構有:
global 引用
當用 global $var 宣告乙個變數時實際上建立了乙個到全域性變數的引用。也就是說和這樣做是相同的:
<?php$var =& $globals["var"];
?>
這意味著,例如,unset $var 不會 unset 全域性變數。
$this
在乙個物件的方法中,$this 永遠是呼叫它的物件的引用。
**:
php 是什麼意思
在php中經常會看到這種符號,但是不明白是什麼意思,有沒有細心點的朋友幫講講,請不要說看手冊之類的話。如果真給我講明白了,我還會有加分的哦!比如這個中的符號是什麼意思 sql mydami query select from dami topad where id id r mydami fetch...
php中 this 是什麼意思
php中 this 是什麼意思 this 的含義是表示 例項化後的 具體物件!我們一般是先宣告乙個類,然後用這個類去例項化物件!但是,當我們在宣告這個類的時候,想在類本身內部使用本類的屬性或者方法。應該怎麼表示呢?例如 我宣告乙個user類!它只含有乙個屬性 name class user 現在,我...
php中 this 是什麼意思
this 的含義是表示 例項化後的 具體物件!我們一般是先宣告乙個類,然後用這個類去例項化物件!但是,當我們在宣告這個類的時候,想在類本身內部使用本類的屬性或者方法。應該怎麼表示呢?例如 我宣告乙個user類!它只含有乙個屬性 name class user 現在,我給user類加個方法。就用get...