
读PHP7源码日记
文章平均质量分 95
搬一口CV的砖
好像是啥都想写,好像是啥都懂一点,好像是啥也不会
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
编译与执行
PHP7与PHP5在编译执行上的区别 在PHP7之前的版本,PHP代码在语法解析阶段直接生成了ZendVM指令(也就是opline指令,后面会聊一下opline指令的~),这使得编译器与执行器耦合在一起。这个模式的坏处就是,当我们如果要换一个VM时候,就需要修改语法解析规则,或者如果PHP的语法规则变了,(例如php中访问对象使用->来访问,想换成成java中 . 来访问),...原创 2018-12-02 23:03:32 · 281 阅读 · 0 评论 -
写在前面
好久没有来更新我的博客,自从换了一家新公司以后,由于某一些机会,开始去阅读PHP7内核方面的实现。也断断续续给组里的小伙伴分享一些内核方面的知识,中间也阅读了很多人的博文,也看了@盘古大叔出了PHP7内核书籍,下面的文章大部分是我阅读源码的一些感受,然后参考书中的要点给整理的博文。我也会陆陆续续把我在公司内网分享的一些内核方面的博文,搬运过来,对于内核感兴趣的,可以去看看@盘古大叔的《PHP7内核...原创 2018-12-02 23:12:20 · 194 阅读 · 0 评论 -
数据类型 - 变量
前提必看 我们这里看的源码都是PHP 7.0.12版本的哟,其他的版本可能变量的实现机制在细节会有一些不同,但是我们主旨都是希望通过阅读源码,来帮我理解下我经常使用语言,在底层实现的原理。(哈哈,毕竟在我没打算换一下语言,PHP还是作为我的编程主语言的) 变量 在一门高级编程语言中,变量是我们经常用来使用的数据形式。 例如我们常常在C中这样使用变量 #include <s...原创 2018-12-02 23:13:34 · 227 阅读 · 0 评论 -
数据类型 - 字符串
字符串的数据结构比较简单,牵扯到的东西比较少,我简单展示下源码中的数据结构的定义。 Zend_string数据结构 typedef struct _zend_string zend_string; struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value */ size_t len; char val[...原创 2018-12-02 23:14:35 · 247 阅读 · 0 评论 -
数据类型 - 引用
引用是一种指向其他数据类型的结构,类似C语言中指针的概念。当修改引用类型的变量时候,其修改将反映到实际引用的变量上。辣么当我们使用$a = &$b这样一个引用时候发生了什么呢?来我们来看看流程吧 $a = &$b ,首先为$a 变量分配一个Zend_reference结构,内嵌了一个zval ,这时候zval.value指向原来zval的value 将原来$b 的类型改为IS_...原创 2018-12-02 23:16:01 · 282 阅读 · 0 评论 -
数据类型 - 类型转换
前言 PHP弱语言,使用时不需要明确定义变量的类型。我大学时候接触都是C,C++,当自己去接触PHP的时候,就震惊不已,哇哇,啥啥,string 与 int 都可以相加,竟然还能通过去!!!!当时就对PHP底层对于数据操作这块很有兴趣,它到底有些啥奇技淫巧,能实现的这些不同类型之间的比较运算,算数运算。这里我们就要稍微讲一下,PHP两种方式:自动类型转换,强制类型转换 自动类型转换 Z...原创 2018-12-02 23:17:56 · 693 阅读 · 0 评论 -
内存管理 - 变量的自动GC机制
前言讨论GC实现 在C/C++中,如果我们想申明一个变量,就必须手动进行内存的分配与释放。变量的内存管理是一件极度繁琐的事情,也极度考验开发者的写代码细心程度。 稍有不慎,就会忘记释放掉,导致不可预知错误。现在的高级语言基本是上都提供了变量自动GC机制,由语言自己进行管理,让开发者解脱出来。 我们先自己思考下,如果是我们来编写内核,怎么自动实现GC。 最简单的实现方式:在定义变量时候分配一...原创 2018-12-02 23:18:54 · 377 阅读 · 0 评论