以echo "Hello World";为例
经历五个步骤:
1、扫描(scanning):先进行语法分析和词法分析,然后将index.php内容变成一个个语言片段(token array)
2、解析(parsing):词法分析后,就需要根据一个个token去组成有意义的表达式
Parsing首先会丢弃Tokens Array中的多余的空格,然后将剩余的Tokens转换成一个一个的简单的表达式
3、编译(complication):将表达式编译成中间码(opcode)
4、执行(execution):将中间码一条一条的执行
5、输出(output buffer):将要输出的额内容输出到缓冲区
下面代码可以看到语法分析和词法分析时生成的token
$code = <<<'PHP_CODE' <?php echo 'Hello World'; PHP_CODE; echo "<pre>"; print_r(token_get_all($code));
输出结果为:
Array
(
[0] => Array
(
[0] => 376
[1] => 1
)
[1] => Array
(
[0] => 319 //tokenid,也就是“词”id
[1] => echo //“词”具体的内容
[2] => 2 //所在的位置,行数
)
[2] => Array
(
[0] => 379
[1] =>
[2] => 2
)
[3] => Array
(
[0] => 318
[1] => 'Hello World'
[2] => 2
)
[4] => ;
)
分析这个返回结果我们可以发现,源码中的字符串,字符,空格,都会原样返回。每个代码中的字符,都会出现在相应的顺序处。
提高PHP代码运行效率:
- 压缩代码,去除无用的注释或空白(因为底层不管是空白还是注释都会原样返回)
- 尽量使用php内置函数或扩展函数
- 用apc/xcache/opcache等缓存php的opcode
- 缓存复杂和耗时运算的结果
- 能异步处理的任务不要马上处理,如发邮件(php是单线程)