您的位置:首页 > 编程语言 > PHP开发

[李景山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 读书笔记 内核
相关文章推荐