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

藏色散人
發布: 2023-04-08 12:56:01
轉載
2559 人瀏覽過

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

推薦:《PHP培訓

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

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

看下面的程式碼:

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

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

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

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

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

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

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

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

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

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

#運行到line:5[##Misplaced &name]和line:[$nameCopy = 'gzchen'],是這樣:

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

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

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

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

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

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

寫時複製(cow)一起考。

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

程式入門欄位!

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

相關標籤:
php
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!