资讯专栏INFORMATION COLUMN

PHP源码研究

Developer / 1315人阅读

摘要:最近闲来无事,所以对这门语言进行更深一层的了解,对源码进行一番研究,是如何执行我们写的脚本的。引擎是语言实现的最为重要的部分,是最基础最核心的部分,它的源码在目录下,代码从编译到执行都是由完成的,后面章节绝大部分的源码分析都是针对的。

最近闲来无事,所以对PHP这门语言进行更深一层的了解,对源码进行一番研究,是如何执行我们写的PHP脚本的。

1.1.3 PHP的相关组成 1.1.3.1 SAPI

PHP本身可以理解为是一个库函数,提供语言的编译与执行服务,它有标准的输入、输出,而SAPI是PHP的接入层,它接收用户的请求,然后调用PHP内核提供的一些接口完成PHP脚本的执行,所以严格意义上讲SAPI并不算PHP内核的一部分。

PHP的角色就好比是leveldb,它实现了基本存储功能,但是没有网络处理模块,而我们基于leveldb实现的完整存储服务就好比是SAPI。

PHP中常用的SAPI有cli、php-fpm,cli是命令行下执行PHP脚本的实现:bin/php script.php,它是单进程的,处理模型比较简单,而php-fpm相对比较复杂,它实现了网络处理模块,用于与web服务器交互。

1.1.3.2 Zend引擎

Zend是PHP语言实现的最为重要的部分,是PHP最基础、最核心的部分,它的源码在/Zend目录下,PHP代码从编译到执行都是由Zend完成的,后面章节绝大部分的源码分析都是针对Zend的。Zend整体由两个部分组成:

编译器: 负责将PHP代码编译为抽象语法树,然后进一步编译为可执行的opcodes,这个过程相当于GCC的工作,编译器是一个语言实现的基础
执行器: 负责执行编译器输出的opcodes,也就是执行PHP脚本中编写的代码逻辑

2.相关文章

[[译] 理解 PHP 内部函数的定义(给PHP开发者的PHP源码-第二部分)][1]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30609.html

相关文章

  • 【总结】我们2018年的关键词-坚持学习

    摘要:因为涉及业务敏感话题,本文只记录我们学习的历程。我由衷的感谢团队的小伙伴们,感谢你们的坚韧不拔,感谢你们的持续成长。这个变化只是在每天的坚持和刻意练习中发生的,是那么的神奇。 因为涉及业务敏感话题,本文只记录我们学习的历程。 关于坚持   从2016年起,我们团队坚持每天早晨8:50-10:30的100分钟早晨讨论,到现在已经两年了,期间没有中断过。我由衷的感谢团队的小伙伴们,感谢你们...

    Imfan 评论0 收藏0
  • 【总结】我们2018年的关键词-坚持学习

    摘要:因为涉及业务敏感话题,本文只记录我们学习的历程。我由衷的感谢团队的小伙伴们,感谢你们的坚韧不拔,感谢你们的持续成长。这个变化只是在每天的坚持和刻意练习中发生的,是那么的神奇。 因为涉及业务敏感话题,本文只记录我们学习的历程。 关于坚持   从2016年起,我们团队坚持每天早晨8:50-10:30的100分钟早晨讨论,到现在已经两年了,期间没有中断过。我由衷的感谢团队的小伙伴们,感谢你们...

    xingpingz 评论0 收藏0
  • Laravel Service Provider 开发时设置延迟加载时遇到的问题

    摘要:因实际项目需求,近日在开发包的时候,发现设置属性设置为时,会导致在方法中注册的无效。研究源码在中注册无效,但是在其他中注册有效,说明是其他问题。所以切记如果准备采用延迟加载时,严禁进行注册等系列操作。严禁在延迟加载的注册和。 因实际项目需求,近日在开发 laravel-database-logger 包的时候,发现设置 ServiceProvider defer 属性设置为 true ...

    Zhuxy 评论0 收藏0
  • 【Swoole源码研究】深入理解Swoole协程实现

    摘要:此时的协程实现无法完美的支持语法,其根本原因在于没有保存栈信息。这是因为调用函数时,底层指令已经将入栈了。协程创建时,底层通过函数实现了栈的创建创建并初始化栈为结构分配空间创建新的执行数据结构从代码中可以看到结构是直接存储在栈的底部。 作者:李乐  本文基于Swoole-4.3.2和PHP-7.1.0版本 Swoole协程简介   Swoole4为PHP语言提供了强大的CSP协程编程模...

    darkerXi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<