PHP代码执行原理

//PHP代码执行过程

//1.将PHP代码转换成有标识的Token,可以使用token_get_all函数来进行查看

//2.语法分析将Token和符合规则的代码生成抽象语法树

//3.根据抽象语法树生成opcode,当虚拟机调用opcode的时候会找到背后的处理函数执行真正的处理,
例如echo 对应的opcode是ZEND_ECHO


var_dump(token_get_all("<?php echo 'hello';?>"));
/**
array(7) {
[0]=>
    array(3) {
        [0]=>int(379)
        [1]=>string(6) "<?php "
        [2]=>int(1)
    }
[1]=>
    array(3) {
        [0]=>int(328)
        [1]=>string(4) "echo"
        [2]=>int(1)
    }
[2]=>
    array(3) {
        [0]=>int(382)
        [1]=>string(1) " "
        [2]=>int(1)
    }
[3]=>
    array(3) {
        [0]=>int(323)
        [1]=>string(7) "'hello'"
        [2]=>int(1)
    }
[4]=>string(1) ";"
[5]=>
    array(3) {
        [0]=>int(382)
        [1]=>string(3) "   "
        [2]=>int(1)
    }
[6]=>
    array(3) {
        [0]=>int(381)
        [1]=>string(2) "?>"
        [2]=>int(1)
    }
}

 */
//在zend_language_parser.h中全部对标识做了定义
/**
 * T_OPEN_TAG = 379
 * T_ECHO = 328
 * T_CONSTANT_ENCAPSED_STRING = 323
 * T_WHITESPACE = 382  表示空格
 * T_CLOSE_TAG = 381
 */
//可见,Token就是一个个的词块,单独的词块是不能表达完整的语义的,还需要借助规则进行组织串联。语法分析器就是这个组织者。
//PHP7中的组织串联的产物就是AST(抽象语法树)
//AST只是中间代码的临时存储介质,还需要转换为opcode才能被引擎直接执行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章