PHP中=賦值操作符對不同資料類型的不同行為

來源:互聯網
上載者:User

首先解釋賦值操作符=的行為,看下面的例子:

複製代碼 代碼如下:$i = 0;
$j = $i;
$j = 0;
echo $j; // 列印輸出0

$arr = array(0);
$arr2 = $arr;
$arr2[0] = 1;
echo $arr[0]; //列印輸出0

class B
{
public $i = 0;
}

$b = new B();
$c = $b;
$c->i = 1;
echo($b->i); // 列印輸出1

從這個例子可以看出,如果=操作符右邊的變數為基礎資料型別 (Elementary Data Type)或者數組,那麼=操作符把右邊變數的一份拷貝賦值給左邊變數;如果右邊變數不是基礎資料型別 (Elementary Data Type)或者數組,如class,那麼=會把一個指向右邊變數的引用賦值給左邊變數。注意:是指向右邊變數的引用,而不是指向右邊變數所指的內容地區的引用;具體看下邊的例子 複製代碼 代碼如下:$a = new A();
$b_a = $a;
$b_r = &$a;

$b_a = null;
var_dump($a); //列印 object(A)[2],$a所指向的內容還在
$b_r = null;
var_dump($a); // 列印 null,$a所指向的內容被清除了

上面的例子也說明了,如果用 $var = &$a 的方式賦值的話,用$var=null來銷毀變數$var的話事實上是把$var所指內容被設定null了,其實這句話也暗示了任何一個指向該內容地區的引用變數均可用來銷毀該內容地區的內容。所以,要銷毀變數$var的話用 unset($var) 。PS:事實上一這種方式賦值$var只是個引用,佔用不了多少記憶體,要不要銷毀沒所謂,這裡這是說下必須用unset的方式銷毀。

下面則是《使用者手冊》中的“引用的解釋”的例子:

$a =& $b;
下邊有這麼一句解釋:
這意味著 $a 和 $b 指向了同一個變數。
注: $a 和 $b 在這裡是完全相同的,這並不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一個地方。
引用是什嗎? 複製代碼 代碼如下:在 PHP 中引用意味著用不同的名字訪問同一個變數內容。這並不像 C 的指標,替代的是,引用是符號表別名。注意在 PHP 中,變數名和變數內容是不一樣的,因此同樣的內容可以有不同的名字。最接近的比喻是 Unix 的檔案名稱和檔案本身――變數名是目錄條目,而變數內容則是檔案本身。引用可以被看作是 Unix 檔案系統中的緊密串連。

關於“引用是什麼”的一點解釋:

int i = 0;
int j = 0;
int *p = &i;
p = &j;
上面的代碼中,p是一個指向i的記憶體位址的指標,而*p才是其中的內容;p=&j指向改變了p指標的指向,用*p=111的運算式才會改變i的內容。而PHP中則不是,下面的例子

$i = 0;
$p = &$i;
$p = 111則馬上會改變$i的值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.