首頁  >  文章  >  後端開發  >  PHP底層分析之關於強制分裂

PHP底層分析之關於強制分裂

藏色散人
藏色散人轉載
2020-03-06 16:12:102646瀏覽

學習需要知其然而知其所以然,PHP底層相關就是這類知識。

推薦:《PHP培訓

今天來講講關於強制分裂的知識,簡單來說,強制分裂就是」在引用變數主動賦值前,該變數傳值賦值過,就會發生強制分裂。」

話說起來比較繞,看下程式碼解析吧。

看下面的程式碼:

PHP底層分析之關於強制分裂

稍微熟悉PHP:&引用符號都應該可以看出,output分別為gzchen,傍晚八點半,gzchen 。

那我們來看看以上程式碼的底層運行流程吧。

眾所周知,一個變數就是一個結構體,長成下面這樣:

PHP底層分析之關於強制分裂

每一行都寫了註釋,此檔案在zend.h在PHP源碼Zend的目錄下。

當程式碼運行到line:3[$name = '傍晚八點半']的時候,記憶體中的結構體長這樣:

PHP底層分析之關於強制分裂

當程式碼運行到line:4[name]的時候,結構體變成這樣:

PHP底層分析之關於強制分裂

#運行到line:5[##Misplaced &<span style="font-size: 14px; line-height: 1.76em;"></span>name]和line:[$nameCopy = 'gzchen'],是這樣:

PHP底層分析之關於強制分裂

此處,此處,就是此處發生了強制分裂。

當is_ref__gc[引用屬性]從0->1,如果refcont_gc>1,那麼就會發生強制分割。偽代碼就是:

PHP底層分析之關於強制分裂

這個就是強制分裂。原本已經經過傳值賦值的變量,再次引用賦值出去。被傳值賦值的變數就會被分裂出一個結構體,在這裡是$myName。

實際上開發基本上用不到這層原理,但在面試中強制分裂通常會和

寫時複製(cow)一起考。

更多程式相關內容,請關注php中文網

程式入門欄位!

以上是PHP底層分析之關於強制分裂的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除