PHP运行机制和原理


以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是单线程)
原文地址:https://www.cnblogs.com/lxhyty/p/11289026.html