[李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的返回值
来源:互联网 发布:weui商城模板源码 编辑:程序博客网 时间:2024/05/16 01:56
函数的返回值
在PHP中,函数都有返回值,分两种情况,使用return语句明确的返回和没有return语句的返回NULL.
return语句
当使用return语句时,PHP给用户自定义的函数返回指定类型的变量。通过词法分析和语法分析,生成中间代码,从Zend/zend_language_parse.y文件中可以确认其生成中间代码调用的是zend_do_return函数。
生成的中间代码为 ZEND_RETURN。
opline->opcode = ZEND_RETURN;
函数的返回值在程序执行时存储在 *EG(return_value_ptr_ptr)。ZE内核对值返回和引用做了区分,并且在此基础上对常量,临时变量和其它类型的变量在返回时进行不同的处理。在return执行完成之前,ZE内核通过调用zend_leave_helper_SPEC函数,清除函数内部使用的变量等。这也是ZE内核自动给函数加上NULL返回的原因之一。
没有return语句的函数
在PHP中,没有过程这个概念,只有没有返回值的函数。但是对于没有返回值的函数,PHP内核会“帮你”加上一个NULL来做返回值。这个“帮你”的操作也是在生成中间代码时进行的。在每个函数解析时都需要执行函数zend_do_end_function_declaration.在此函数中有一条语句:
zend_do_return(NULL,0 TSRMLS_CC);
内部函数的返回值
内部函数的返回值都是通过一个名为return_value的变量传递的。这个变量同时一个函数中的一个参数,在PHP_FUNCTION函数扩展开来后可以看到。这个参数总是包括有一个事先申请好空间的zval容器,因此你可以直接访问其成员并对其进行修改而无需return_value执行一下MAKE_STD_ZVAL宏指令。
从函数直接返回值的宏:
如:
RETURN_RESOUCE(resource)返回一个资源。
阅读全文
0 0
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的返回值
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数间的转换
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的定义
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的参数-1
- [李景山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] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--类型提示的实现
- 为什么揉
- c# 选择结构与循环结构
- c# as is 的区别
- stack(栈)
- MySQL的导入和导出
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的返回值
- SSH整合:No Spring WebApplicationInitializer types detected on classpath
- html为图像添加超链接
- CodeForces
- JavaScript 模块化开发历程
- 总结7
- 关于痛苦与坚持
- getSimpleName()
- C++primer学习笔记-----6.6函数匹配