這里閱讀的php版本為PHP-7.1.0 RC3,閱讀代碼的平臺(tái)為linux

實(shí)際上,從這個(gè)函數(shù)開始,就已經(jīng)進(jìn)入到了zend引擎的范圍了。

zend_eval_string_ex(exec_direct, NULL, "Command line code", 1)

實(shí)際上是調(diào)用Zend/zend_execute_API.c

zend_eval_stringl_ex(str, strlen(str), retval_ptr, string_name, handle_exceptions);

再進(jìn)去是調(diào)用

result = zend_eval_stringl(str, str_len, retval_ptr, string_name);

這里的retval_ptr為NULL,string_name為"Command line code", str為"echo 12;"

zend_eval_stringl

其實(shí)這個(gè)函數(shù)主流程并不復(fù)雜。簡(jiǎn)化下來就如下

ZEND_API int zend_eval_stringl(char *str, size_t str_len, zval *retval_ptr, char *string_name) /* {{{ */ {
    ...
    new_op_array = zend_compile_string(&pv, string_name); // 這個(gè)是把php代碼編譯成為opcode的過程 ...
    zend_execute(new_op_array, &local_retval); 
        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式