首頁 後端開發 php教程 php引用&符號詳解

php引用&符號詳解

Nov 24, 2016 am 10:53 AM
php

php的引用(就是在變數或函數、物件等前面加上&符號)

在PHP中引用的意思是:不同的名字存取同一個變數內容.

 

變數的引用

PHP的引用允許你用兩個變數來指向同一個內容

例一:

$a="2010";

$b =&$a;

echo $a;//這裡輸出: 2010

echo $b;//這裡輸出:2010

$b="2012";

echo $a;//這裡$a的值變成2012所以輸出

echo $b;//這裡輸出2012

?>

例二:

$a = "date";

$b = &$a;

echo $a;

$b = &$a;

echo $a; date

$b = "date1";

echo $a; // date1

echo $b; // date1

unset($a);

echo $b;

從上面的兩個例子中,可以看出,把$b的記憶體位址給了$b,並不是簡單的賦值。所以對$b

的任何操作也會影響到$a

另種說法,就是給$a增加了一個別名$b,如果刪除了$a,只是刪除了這個變量的名字,並沒有刪除變量的內容,用別名還是可以把這個變數的內容顯示出來。 (如圖關係)

       

函數的傳址呼叫

例三:

function test($a)

function test($a)

function test($a)

$b=1;

echo $b;//輸出1

//這裡$b傳遞給函數的其實是$b的變數內容所處的記憶體位址,透過在函數裡改變$a的值就可以改變$b的值了

test($b);   

echo $b;//輸出101

?>

如何在這裡test(1);的話就會出錯

能是變量,常數不具有傳址。

 

函數的引用回傳

函數的引用回傳多用在物件中,這裡方便理解用靜態變數做個例子

例四:

    $b=$b+1;

    echo $b;

    return $b; 1

$a=test();

$a=5;

$a=test();//這語句會輸出$b的值為2

 

$a=&test(); //這條語句會輸出$b的值為3

$a=5;

$a=test();//這條語句會輸出$b的值為6

註釋,這個函數是有輸出的,而且也有回傳值的。

$a = test();只是將函數test的回傳值$b賦給$a了,就是很普通的賦值而已,不是函數的參考回傳。所以$a不管做什麼操作,都不會影響$b。

$a = &test();作用就是將$b的記憶體位址與$a的記憶體位址指向了同一個地方,會產生類似$b = &$a的效果,如果$a的值改變了,即變成了5,也會影響$b的值。所以在執行$a = &test();$a = 5,就有$b = 5,經過函數處理輸出$b = 6;

?>

 

物件的引用

五例: ?php

class a{

var $abc="ABC";

}

$b=new a;

$c=$b;

echo $b->abc;$c=$b;

echo $b->abc;/這裡輸出ABC

echo $c->abc;//這裡輸出ABC

$b->abc="DEF";

echo $c->abc;//這裡輸出DEF

?>

多PHP5中的運行的效果,在PHP5中物件的複製是透過引用來實現的。

上列中$b=new a; $c=$b;其實等效於$b=new a; $c=&$b;

PHP5中預設就是透過引用來呼叫對象,但有時你可能想建立一個物件的副本,並希望原來的物件的改變不會影響到副本。為了這樣的目的,PHP定義了一個特殊的方法,稱為__clone。

 

引用的作用

如果程式比較大,引用同一個物件的變數比較多,並且希望用完該物件後手工清除它,建議用"&"方式,然後用$var=null的方式清除。其它時候還是用php5的預設方式吧.。

另外, php5中對於大數組的傳遞,建議用"&"方式,畢竟節省內存空間使用。

 

取消引用

當你unset一個引用,只是斷開了變數名稱和變數內容之間的綁定。這並不意味著變數內容被銷毀了。

例如:

 

$a = 1;

$b =& $a;

unset ($a);

?> 

可以參考變數的引用那段

 

 global 引用

當用global $var宣告一個變數時實際上建立了一個到全域變數的引用。

它等價於下面這段程式碼:

$var =& $GLOBALS["var"];

?> 

 這意味著,例如,unset $var不會ununset全局變量。

 

$this

在一個物件的方法中,$this永遠是呼叫它的物件的引用。

 

另外說明

php中對於位址的指向(類似指標)功能不是由使用者自己來實現的,是由Zend核心實現的,php中引用採用的是「寫時拷貝」的原理,就是除非發生寫入操作,才會拷貝,其他操作,指向同一個位址的變數或物件是不會被拷貝的。

假如,有以下程式碼:

$a="ABC"; 
$b=$a;

Ps:我個人認為這裡應該是$b = &$a,才能把$a和$b指向同一記憶體地址,但是我參考的資料上面就是這麼寫的,目前我對&了解的還不是很深入,如果有朋友有不同見解的可以提出來,謝謝嘍

此時,$a與$b都是指向同一記憶體位址,而並不是$a與$b佔用不同的記憶體

 

如果在上面的程式碼基礎上再加上,如下程式碼

$a="EFG";

這裡進行「寫」操作了

由於$a與$b所指向的內存的數據要重新寫一次了,此時Zend核心會自動判斷,自動為$b生產一個$a的數據拷貝,重新申請一塊內存進行存儲。


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles