//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才能被引擎直接執行。