您好,登錄后才能下訂單哦!
今天小編給大家分享的是PHP底層分析中強制分裂的講解,簡單來說,強制分裂就是”在引用變量主動賦值前,該變量傳值賦值過,就會發生強制分裂。”
話說起來比較繞,看下代碼解析吧。
看下面的代碼:
稍微熟悉 PHP:&引用符號都應該可以看出,output分別為gzchen,傍晚八點半,gzchen。
那么我們來看看以上代碼的底層運行流程吧。
眾所周知,一個變量就是一個結構體,長成下面這樣:
每一行都寫了注釋,此文件在zend.h在PHP源碼Zend的目錄下。
當代碼運行到line:3[$name = ‘傍晚八點半’]的時候,內存中的結構體長這樣:
當代碼運行到line:4[name]的時候,結構體變成這樣:
運行到line:5[Misplaced &
name]和line:[$nameCopy = ‘gzchen’],是這樣:
此處,此處,就是此處發生了強制分裂。
當is_ref__gc[引用屬性]從0->1,如果refcont_gc>1,那么就會發生強制分裂。偽代碼就是:
這個就是強制分裂。原本已經經過傳值賦值的變量,再次引用賦值出去。被傳值賦值的變量就會被分裂出一個結構體,在這里是$myName。
實際開發基本用不到這層原理,但在面試中強制分裂通常會和寫時復制(cow)一起考。
關于PHP底層分析中強制分裂的講解就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。