关闭

如何理解“php是用c写的”

标签: php
1147人阅读 评论(0) 收藏 举报
分类:

很多人知道,php是用c写的。那么到底c写了php的什么呢?要理解这个,我们先从一个php脚本如何执行说起。

假设有个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内部相应的函数。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46265次
    • 积分:785
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:5篇
    • 译文:1篇
    • 评论:0条
    文章分类
    最新评论