php引用計數與變數引用_PHP教程

來源:互聯網
上載者:User

php引用計數與變數引用


 每個php5.5變數都儲存在一個叫做zval的變數容器中。   一個zval變數容器,除了包含變數的類型與值外,還包含兩個位元組的額外資訊:     1、第一個是“is_ref”,是個bool型,用來標識這個變數是否屬於引用集合(reference set),若屬於則其值為1,否則為0。       有個這個變數php引擎就能夠將普通變數與引用變數區分開來。     2、第二個是“refcount”,用來表示指向這個zval變數(符號)的個數。每個符號都有範圍(scope),那些主指令碼和函數或者方法也都有範圍。       所有的符號都存在一個符號表中。   當一個變數被賦值一個常量值時,就會產生一個zval變數容器,如下例:   這個時候執行以下程式得到$a變數指向zval容器中的is_ref與refcount值 a: (refcount=1, is_ref=0)='Hello world'  下面,我們進行如下實驗,來探討引用賦值與普通賦值。   首先,使$b指向$a,查看is_ref、 refcount,如下: a: (refcount=2, is_ref=0)='Hello world'b: (refcount=2, is_ref=0)='Hello world'  讓$b引用$a,查看is_ref refcount,如下 a: (refcount=2, is_ref=1)='Hello world'b: (refcount=2, is_ref=1)='Hello world'  從上我們可以分析出,當有變數引用相應zval容器時,is_ref為1。   我們進一步分析,我們把$b 引用$a,$c指向$a,如下

  列印結果如下 a: (refcount=2, is_ref=1)='Hello world'b: (refcount=2, is_ref=1)='Hello world'c: (refcount=1, is_ref=0)='Hello world'  可見,這個時候php5.5引擎為$c重建立立了一個zval容器,容器中的資料類型、值與$a指向的容器中的完全相同,不同的是其refcount與is_ref的值。 因此,我們可以看出,php5.5的zval容器中的is_ref變數要麼標識引用集合,要麼標識普通集合,當兩者都有時,他將複製zval容器,來解決衝突問題。      總結:   1、在php5.5以後,“變數賦值”都是指向賦值,即將某個變數指向特定的zval容器。   2、“變數引用”則是將變數與變數進行綁定,若綁定的變數中有一個變數改變了指向,則相互綁定的其他變數的指向也隨著改變。     若變數重新引用變數,則其原來的變數綁定解除,轉而綁定新的變數。如下代碼:   

  這將使 foo 函數中的 $var 變數在函數調用時和 $bar 綁定在一起,但接著又被重新綁定到了 $GLOBALS["baz"] 上面。不可能通過引用機制將 $bar 在函數調用範圍內綁定到別的變數上面,因為在函數 foo 中並沒有變數$bar(它被表示為 $var,但是 $var 只有變數內容而沒有調用符號表中的名字到值的綁定)。可以使用引用返回來引用被函數選擇的變數。

http://www.bkjia.com/PHPjc/1053350.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1053350.htmlTechArticlephp引用計數與變數引用 每個php5.5變數都儲存在一個叫做zval的變數容器中。 一個zval變數容器,除了包含變數的類型與值外,還包含兩個位元組...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.