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

很多人知道,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内部相应的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值