前段时间因为项目需要,研究了一下在 Windows 系统下进行 PHP 扩展的开发,对于 PHP 扩展的开发并不是一件容易的事情(话又说回来了,会者不难,难者不会,关键是自己不会)。我当时的需求,主要是通过 PHP 扩展来加载 DLL 文件,并调用 DLL 中的导出函数。由于以前有一些 Win32 开发的基础,因此这个需求相对还不算太复杂。

开发 PHP 扩展比较难,我个人认为有两方面的原因,一方面需要了解操作系统相关的开发,毕竟 PHP 扩展不是 .so 文件就是 .dll 文件,另一方面需要了解 PHP 本身的底层数据结构。因此,借此机会就打算学习 PHP 的源码。不过说来惭愧,由于本身能力有限,所以学习速度比较缓慢。当然了,我是在有参考书的情况下进行学习的,但是速度也并不高。在有参考书的情况下,学习速度也不快,除了本身的能力外,另一方面是数据结构比较多,而且数据之间的关系也比较多,不能很快的对数据结构进行记忆,也不能很好的理清数据结构之间的关系,这是我比较大的障碍。(当然了,我投入的时间也并不多,这个是不好意思说罢了)

由于上面的原因,我觉得一边看书和看源码的同时,一边去整理各个数据结构和数据关系的图,以方便和加强自己的记忆,从而让自己更好的去理解。

我看的参考书,在源码分析前,首先介绍了源码的目录结构,我将其整理成了思维导图,如下图。

源码目录结构相对比较简单,毕竟就是一个大纲,在不断学习源码的过程中,其实可以接着完善,把源码相应的文件,相应的结构体都维护进去,这样思维导图就会逐步的完整,也就相对的有意义了。

在参考书中介绍完源码目录结构后,开始介绍 PHP 变量的数据结构。变量的数据结构在书中有详细的介绍,在详细介绍之前,只是粗略的进行了整体上的介绍,在这里,我把它们的数据结构和数据关系也进行了整理,并且把结构体所在的目录和文件也进行了标注,方便自己在学习源码的时候方便查找,也方便快速查阅各个数据结构之间的关系,毕竟这些数据结构实在太多了,如下图。

上面的图,就是关于 PHP 变量的底层数据结构的图,图中的数据结构中字段并不完整,因为我是在逐步的去完善,在每学习完一部分后就去完善一部分数据结构,当数据结构完善了,图也就完善了。由于图过于大,所以这里没有办法显示清楚,需要详细图片的,可以在公众号中回复“PHP源码学习”,即可获得清晰的大图。希望可以对大家学习 PHP 的源码有所帮助。


我的微信公众号:“码农UP2U”

最新文章

  1. <<< 网页中如何利用原生js和jquery储存cookie
  2. R12供应商地点层付款方法SQL
  3. DOM与CSS样式表
  4. 在 C++Builder 工程里调用 DLL 函数
  5. cryptdb中wrapper.lua的分析
  6. 批处理之命令补充II
  7. HDU 1166 单点更新,区间求和
  8. 01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题
  9. leetcode@ [354] Russian Doll Envelopes (Dynamic Programming)
  10. linux中vi编辑器
  11. iOS平台下cookie的使用
  12. 每天一个Linux命令(02)--cd命令
  13. 谈一谈Java8的函数式编程(二) --Java8中的流
  14. vue+Element实现静态旅游网站
  15. ThinkPHP5零基础搭建CMS系统(一)
  16. 免费下载获取Odoo中文开发 指南 手册
  17. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165321
  18. vue2.x入坑总结—回顾对比angularJS/React的一统
  19. Bugku-CTF之Web5(JSPFUCK??????)
  20. RocketMQ集群部署记录

热门文章

  1. java执行-cp报错 error: could not load JDBC driver
  2. 25.推荐---协同过滤(Collaborative Filtering)
  3. fiddler抓包的一些基本知识整理
  4. 浅谈python面向对象编程和面向过程编程的区别
  5. Redis与Redis 伪集群环境的搭建
  6. java之可变个数的形参
  7. IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1
  8. linux查看占用端口号的程序及pid
  9. PHP stat 文件系统函数
  10. leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)