如何理解“php是用c写的”
2015-07-08 12:31
260 查看
很多人知道,php是用c写的。那么到底c写了php的什么呢?要理解这个,我们先从一个php脚本如何执行说起。
假设有个php文件helloWorld.php:
然后我们在命令行执行:php helloWorld.php。之后会发生什么呢?
①、机器会打开一个叫php的程序,这个程序是用c写的。
②、php程序会去读取helloWorld.php里面的内容,然后对其内容进行词法分析将内容(也就是php代码)切分成一个个的token,比如上面的代码会得到如下的token集:
③、php程序对这些token集进行语法分析,如果没有错误就将其编译成一条条的opcode,这些opcode的结构如下:
④、php的zend引擎一条一条的读取opcode,根据opcode获取函数名,然后zend引擎执行其内部相应的函数。
到这里,我们大致明白:我们写的php代码,会被转化为一堆指令集,然后php程序根据这些指令集,执行其内部相应的函数,最终得到我们想要的结果。所以,“php是由c写的”这句话可以这样理解:用c语言编写了一个程序,这个程序我们把他叫做zend。运行这个程序,并向这个程序传入一个后缀为php的文件名,这个程序读取文件中的内容,然后把内容转化为一系列的指令,并根据这些指令,运行zend内部相应的函数。
假设有个php文件helloWorld.php:
<?php $str = "hello world!"; echo $str;
然后我们在命令行执行:php helloWorld.php。之后会发生什么呢?
①、机器会打开一个叫php的程序,这个程序是用c写的。
②、php程序会去读取helloWorld.php里面的内容,然后对其内容进行词法分析将内容(也就是php代码)切分成一个个的token,比如上面的代码会得到如下的token集:
array ( 0 => array ( 0 => 368, 1 => '<?php', 2 => 1, ), 1 => array ( 0 => 371, 1 => '', 2 => 2, ), 2 => '=', 3 => array ( 0 => 371, 1 => '', 2 => 2, ), 4 => array ( 0 => 315, 1 => '"hello world!"', 2 => 2, ), 5 => ';', 6 => array ( 0 => 371, 1 => '', 2 => 3, ), 7 => array ( 0 => 316, 1 => 'echo', 2 => 4, ), 8 => array ( 0 => 371, 1 => '', 2 => 4, ), 9 => ';' )
③、php程序对这些token集进行语法分析,如果没有错误就将其编译成一条条的opcode,这些opcode的结构如下:
struct _zend_op { opcode_handler_t handler; //读到这条opcode时,会执行这个函数,这个函数是根据opcode指令码与处理函数映射关系获得的 znode result; znode op1; znode op2; ulong extended_value; uint lineno; zend_uchar opcode;//opcode指令码 };
④、php的zend引擎一条一条的读取opcode,根据opcode获取函数名,然后zend引擎执行其内部相应的函数。
到这里,我们大致明白:我们写的php代码,会被转化为一堆指令集,然后php程序根据这些指令集,执行其内部相应的函数,最终得到我们想要的结果。所以,“php是由c写的”这句话可以这样理解:用c语言编写了一个程序,这个程序我们把他叫做zend。运行这个程序,并向这个程序传入一个后缀为php的文件名,这个程序读取文件中的内容,然后把内容转化为一系列的指令,并根据这些指令,运行zend内部相应的函数。
相关文章推荐
- ftp 获取目录失败原因之
- php常用函数用法
- GitLab设置SMTP邮件服务器
- YII 用户登录 借鉴ecshop salt思路
- php 中的declare
- VMware虚拟机RedHat 5 系统下ftp服务器的安装测试
- php创建多级目录代码 转
- PHP 上传文件大小限制
- PHP的ArrayAccess学习笔记
- [thinkphp] 无限极分类
- php接口数据加密、解密、验证签名
- PHP与ECMAScript_3_常用字符串函数
- PHP通过串口实现发送短信
- PHP使用CURL模拟登录的方法
- php学习手记
- 解决PHP服务端返回json字符串有特殊字符的问题
- laravel安装
- 一个PHP实现的轻量级简单爬虫
- php中session的理解
- ThinkPHP 中M方法和D方法详解----转载