這篇文章主要介紹了關於淺談PHP源碼五:關於array 數組的創建,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
在PHP的調試環境中使用cli執行PHP檔
一步一步追蹤程式碼,由於對C和詞法分析不熟悉
所使用PHP檔如下:
<?PHP $a = array(1, 2, 3); var_dump($a);
程式碼簡單追蹤如下:
===>php_execute_script(&file_handle TSRMLS_CC); //php_cli.c line1130 ==> retval = (zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, NULL, 3, prepend_file_p, primary_file, append_file_p) == SUCCESS); // main.c 2023行 ==> EG(active_op_array) = zend_compile_file(file_handle, type TSRMLS_CC); // zend.c 1126行 ==> compiler_result = zendparse(TSRMLS_C); // zend_language_scanner.c 3420行==> zend-language_parse.c 2773行==>case 382: { zend_do_init_array(&(yyval), &(yyvsp[(1) - (1)]), NULL, 0 TSRMLS_CC); } // zend_language_parser.c 4689行 ==>void zend_do_init_array(znode *result, znode *expr, znode *offset, zend_bool is_ref TSRMLS_DC) // zend_compile.c 3348行 ==>case 380: { zend_do_add_array_element(&(yyval), &(yyvsp[(3) - (3)]), NULL, 0 TSRMLS_CC); }// zend_language_parser.c 4684行 ==>void zend_do_add_array_element(znode *result, znode *expr, znode *offset, zend_bool is_ref TSRMLS_DC) // zend_compile.c 3371行
在程式碼追蹤過程中,發現當PHP的源碼產生語法樹時,遇到array和第一個數字時是沒有任何有關數組的操作的,當解析到1後面的逗號時才會調用zend_do_init_array函數,創建陣列
以上只是一個追蹤的過程,對於程式碼沒有解釋,由於自身水平有限,對於詞法分析和語法分析了解不多,
另:如果PHP程式的最後一行程式碼後面沒有回車換行,在讀取原始碼檔案時會看到一堆亂碼
待續…
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
#淺聊PHP原始碼三:關於strrchr , strstr, stristr函數
淺聊PHP原始碼二:關於strlen, strtolower, strtoupper, ord, chr函數
以上是淺談PHP原始碼五:關於array 陣列的創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!