本文實例講述了php 多個變量指向同一個引用($b = $a)用法。分享給大家供大家參考,具體如下:
引用是什么?
引用就是多個變量指向同一個內存區域地址。如我們經常用的實例一個類,就是內存中開辟了一個區域存儲實例的類,實例賦值給變量就是讓這個變量指向這個內存區域。
多個變量指向同一個引用有什么好處?
節約了內存空間,多個變量指向同一個內存地址,在調用的時候多個變量都是指向的同一個內存地址。
多個變量指向同一個引用的缺點
要注意使用安全,即是由于多個變量都是指向的同一個內存地址,其中一個變量更改了某個屬性,其它的變量調用的時候都是用的已經更改的實例。
在php 中我們為一個變量賦值的時候會在內存中開辟一個區域存儲該值。那么我們將這個變量賦值給另一個變量的時候會在內存中重新開辟一個區域去存儲改值嗎? 我做了如下實驗
?php
$d = "aaa";
$c = $d;
echo $c . "br />";
$d = "bbb";
echo $c . "br />";
/**
* 執行結果是
* aaa
* aaa
*/
?>
看到這里 不知道你理解了沒有,創建的變量$d 并為之賦初始值aaa 再將$d 賦值給$c,之后輸出$c 然后更改$d的值,在輸出$c。這個實驗告訴我們,$d再給$c賦值的時候是在內存中重新開辟了一個區域的。
那么,我們怎么才能讓$d和$c 都指向一個引用呢? 查了下資料 如下方法 讓兩個變量指向同一個內存地址
?php
$a = "123";
$b = $a;
echo $b."br />";
$a = "456";
echo $b;
/**
* 運行結果如下
* 123
* 456
*/
?>
我更改了一下變量的名字。方便測試發現區別。在這里我們可以看到 $b=$a 其中符號的作用就是讓$b 指向的是$a的內存區域,而不是重新開辟一個區域。所以當更改$a的值的時候$b也會隨著變化。
前面我們實驗的對象是基本字符串,現在我們來看下類是否遵從這個規則
?php
class Demo
{
public $demo = "aaaa";
}
$demo1 = new Demo();
$demo2 = $demo1;
echo $demo2->demo . "br />";
$demo1->demo = "bbbb";
echo $demo2->demo . "br />";
/**
* 運行結果
* aaaa
* bbbb
*/
?>
我這里并沒有符號指定$demo2必須指向$demo1 的內存區域,所以關于類,當一個實例變量賦值給另一個變量的時候默認就是兩個變量指向同一個引用;
php 的引用我覺得沒有 java的好用,也許是這門語言本身還在發展,很多處理還沒有那么方便完善。 java初去基本數據類型(int、long、byte、short、char、boolean、float、double等),兩個變量賦值都是指向同一個內存地址,而且不用你特意去指定。
更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:- PHP 引用的概念
- 詳解PHP的引用計數
- php的對象傳值與引用傳值代碼實例講解
- php傳值和傳引用的區別點總結
- php引用和拷貝的區別知識點總結
- php中對象引用和復制實例分析
- PHP實現無限極分類的兩種方式示例【遞歸和引用方式】
- PHP中引用類型和值類型功能與用法示例
- PHP 弱引用的相關總結