视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
PHP底层分析之关于强制
2020-11-03 18:16:48 责编:小采
文档
学习需要知其然而知其所以然,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)一起考。

更多编程相关内容,请关注Gxlcms编程入门栏目!

下载本文
显示全文
专题