[李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的定义
来源:互联网 发布:唯品会下单软件 编辑:程序博客网 时间:2024/06/05 11:24
函数的定义
首先我们来看一下简单函数定义:
function foo($var){ echo $var;}
词法分析
在zend/zend_language_scanner.l中我们可以找到如下所示的代码:
<ST_IN_SCRIPTING>"function"{ return T_FUNCTION;}
语法分析
在zend/zend_language_parse.y文件中找到函数的声明过程标记如下:
function: T_FUNCTION{$$.u.opline_num = CG(zend_lineno);};;is_reference: /* empty */ {$$.op_type = ZEND_RETURN_VAL;} | '&' {$$.op_type = ZEND_RETURN_REF;};
关注点在function is_reference T_STRING,表示function 关键字,是否引用,函数名。
T_FUNCTION标记只是用来定位函数的声明,表示这是一个函数,而更多的工作是与这个函数相关的东西,包括参数,返回值等。
生成中间代码
语法解析后,我们看到所执行编译函数为zend_do_begin_function_declaration.在zend/zend_complie.c文件中找到其实现如下:
生成的中间代码为ZEND_DECLARE_FUNCTION,根据这个中间代码及操作数对应的op_type。我们可以找到中间代码的执行函数为ZEND_DECLARE_FUNCTION_SPEC_HANDLER
在生成中间代码时,可以看到已经统一了函数名全部为小写,表示函数的名称不是区分大小写的。
执行中间代码
在zend/zend_vm_execute.h文件中找到ZEND_DECLARE_FUNCTION中间代码对应的执行函数:ZEND_DECLARE_FUNCTION_SPEC_HANDLER.此函数只调用了函数do_bind_function。其调用代码为:
do_bind_function(EX(opline),EG(function_table),0);
在这个函数中将EX(opline)所指向的函数添加到EG(function_table)中,并判读是否已经存在相同名称的函数,如果存在则报错。
0 0
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的定义
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数间的转换
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的参数-1
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的参数
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的返回值
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --简介
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的调用和执行
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --匿名函数及闭包
- 深入理解PHP内核[读书笔记]--第四章:函数的实现 --匿名函数及闭包
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--opcode处理函数查找
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--PHP脚本的执行
- [李景山php] 深入理解PHP内核[读书笔记]--第五章:类和面向对象 --类的结构和实现
- [李景山php] 深入理解PHP内核[读书笔记]--第五章:类和面向对象 --访问控制的实现
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的生命周期
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的作用域
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--PHP的哈希实现
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--PHP脚本的执行 词法分析和语法分析
- 原:PHP内核研究 函数的定义
- STL实现Ugly Numbers 注解
- QT QML初体验随笔之QQuickView(1)
- Cannot modify header information
- 正则表达式进阶
- jsp中c标签的c:if和c:choose判断
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的定义
- RxJava1.x 初识
- Android转场动画的学习
- b-树(c语言)
- leetcode week12
- 快速排序
- X264编码h264
- 有关Android截图与录屏功能的学习
- 命令行下过滤adb logcat的输出