淺談PHP原始碼五:關於array 陣列的創建

不言
發布: 2023-04-01 21:52:02
原創
1558 人瀏覽過

這篇文章主要介紹了關於淺談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原始碼四:關於count函數

#淺聊PHP原始碼三:關於strrchr , strstr, stristr函數

淺聊PHP原始碼二:關於strlen, strtolower, strtoupper, ord, chr函數

以上是淺談PHP原始碼五:關於array 陣列的創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板