這里閱讀的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ù)雜。簡化下來就如下
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);
網(wǎng)友評論