PHP底层剖析之对于强迫破裂
引荐:《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底层剖析之关于强迫分裂的具体内容,更多请关注百分百源码网其它相关文章!