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才能被引擎直接執行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章