您的位置:首页 > 编程语言 > PHP开发

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

2015-07-08 12:31 260 查看
很多人知道,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内部相应的函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: