网站地图    收藏   

主页 > 后端 > php资料库 >

PHP中array 数组的创建基础_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 在PHP的调试环境中使用cli执行PHP文件 一步一步跟踪代码,由于对C和词法分析不熟悉 所使用PHP文件如下: ?PHP $a = array(1, 2, 3); var_dump($a); 代码简单跟踪如下: ===php_execute_script(file_handle...

在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程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论