[李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的返回值
2017-05-17 08:02
519 查看
函数的返回值
在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)返回一个资源。
相关文章推荐
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数间的转换
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --简介
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --匿名函数及闭包
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的调用和执行
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的参数
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的定义
- [李景山php] 深入理解PHP内核[读书笔记]--第四章:函数的实现 --函数的参数-1
- [李景山php] 深入理解PHP内核[读书笔记]--第五章:类和面向对象 --类的结构和实现
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--PHP的哈希实现
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--SAPI概述-PHP中的CGI实现
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--opcode处理函数查找
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--类型提示的实现
- [李景山php] 深入理解PHP内核[读书笔记]--第五章:类和面向对象 --访问控制的实现
- 深入理解PHP内核[读书笔记]--第四章:函数的实现 --匿名函数及闭包
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--数据类型转换
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的赋值和销毁
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--opcode
- [李景山php] 20170504深入理解PHP内核[读书笔记]--第一章准备工作和背景知识--1
- [李景山php] 20170504深入理解PHP内核[读书笔记]--第一章准备工作和背景知识--2
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--常量