深入理解PHP物件賦值

2021-09-06 07:39:58 字數 2115 閱讀 6744

1

<?php

2 //深入理解php物件賦值

3echo '';45

$obj = new

stdclass;

6$obj->name = 'pig';

7var_dump($obj);  //

object(stdclass)#1 (1) 89

$copy = $obj;   //

$obj ,$copy都是new stdclass返回的同乙個識別符號的拷貝

10var_dump($copy);    //

object(stdclass)#1 (1)

1112

$objref = &$obj;    //

此時會將$obj轉換成引用,然後賦值給$objref,因此$obj,$objref都為引用

13var_dump($objref); //

object(stdclass)#1 (1)

1415

$objclone = clone

$obj; //

新空間16

$obj->name = 'after clone';

17var_dump($objclone);   //

object(stdclass)#1 (1)

18var_dump($obj); //

object(stdclass)#1 (1)

1920

//unset是刪除引用效果

21$nameref = &$obj->name; //

$obj->name被轉換成引用(& string),然後賦給$nameref

22var_dump($obj); //

object(stdclass)#2 (1)

23unset($nameref);   //

刪除引用

24var_dump($obj); //

object(stdclass)#1 (1)

2526

//null是賦值效果

27$nameref = &$obj->name; //

恢復name的引用

28var_dump($obj); //

object(stdclass)#2 (1)

29$nameref = null

;

30var_dump($obj); //

object(stdclass)#2 (1)

3132

unset($objref); //

僅僅刪除了引用

33var_dump($obj); //

object(stdclass)#1 (1)

3435

$objref = &$obj;   //

恢復物件引用

36$obj->name = 'lucy';

37$obj = null;   //

賦值$obj為null,$obj只是new stdclass的標識拷貝,不會影響其內容。

38//$objref做為$obj的引用,會同時被賦值null

39//等價 $objref = null;

4041

var_dump($obj,$copy,$objref,$objclone

);42

//null,

43// object(stdclass)#1 (1) ,

44// null,

45// object(stdclass)#1 (1)

4647 ?>

深入理解php的引用賦值

關於php引用的一般問題大家看資料就行了,這次我們來聊點有趣的東西。今天乙個朋友在群裡面問起來乙個關於變數引用賦值的問題,問題本身很簡單,我突然想做乙個實驗,來看看array直接賦值和引用賦值效能上的差別,寫完 發現另外乙個問題.請看 a array fill 0,1000000,10 functi...

深入理解PHP原理之變數賦值

在前面的文章 深入理解php原理之變數結構 中我已經介紹了php變數的內部結構,下面我將會對變數賦值過程中,php內部對資料處理的原理進行闡述,不過在講述該原理前,需要先了解一下變數名和它的值是如何關聯起來的,這個對變數賦值內部原理的理解非常重要,例如 a 1 這個例子看起來非常簡單,但是你知道 變...

深入理解PHP中賦值與引用

先看下面的問題 a 10 將常量值賦給變數,會為a分配記憶體空間 b a 變數賦值給變數,是不是copy了乙份副本,b也分配了記憶體空間呢?c a 引用是不會為c分配空間的,c和a是共用乙份空間的。對於中間的那個問題,你的答案是什麼呢?在今天之前,我的答案是會為b分配記憶體空間。因為我是這麼理解的 ...