zoukankan      html  css  js  c++  java
  • 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是单线程)
  • 相关阅读:
    Count on a tree
    图论1 1009
    DP2 1008
    DP1 1008
    NOIP 模拟 1006
    2019 CSP-S 初赛退役记
    9.13——TEST NOIP模拟测试
    [洛谷P2387][NOI2014]魔法森林
    [洛谷P2596][ZJOI2006]书架
    [BZOJ4241]历史研究
  • 原文地址:https://www.cnblogs.com/lxhyty/p/11289026.html
Copyright © 2011-2022 走看看