千家信息网

PHP7如何传参与返回值

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关PHP7如何传参与返回值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言这次,我们将演示如何在PHP扩展中接受传入的参数和输出返回值。
千家信息网最后更新 2026年11月01日PHP7如何传参与返回值

这篇文章将为大家详细讲解有关PHP7如何传参与返回值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

前言

这次,我们将演示如何在PHP扩展中接受传入的参数和输出返回值。

我们将在扩展中实现default_value方法。【】

代码

实现default_value方法

default_value方法的PHP扩展源码:

PHP_FUNCTION(default_value){    zend_string     *type;        zval            *value = NULL; #ifndef FAST_ZPP    /* Get function parameters and do error-checking. */    if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|z", &type, &value) == FAILURE) {        return;    }    #else    ZEND_PARSE_PARAMETERS_START(1, 2)        Z_PARAM_STR(type)        Z_PARAM_OPTIONAL        Z_PARAM_ZVAL_EX(value, 0, 1)    ZEND_PARSE_PARAMETERS_END();#endif         if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "int", 3) == 0 && value == NULL) {        RETURN_LONG(0);    } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "int", 3) == 0 && value != NULL) {        RETURN_ZVAL(value, 0, 1);     } else if (ZSTR_LEN(type) == 4 && strncmp(ZSTR_VAL(type), "bool", 4) == 0 && value == NULL) {        RETURN_FALSE;    } else if (ZSTR_LEN(type) == 4 && strncmp(ZSTR_VAL(type), "bool", 4) == 0 && value != NULL) {        RETURN_ZVAL(value, 0, 1);     } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "str", 3) == 0 && value == NULL) {        RETURN_EMPTY_STRING();    } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "str", 3) == 0 && value != NULL) {        RETURN_ZVAL(value, 0, 1);     }     RETURN_NULL();}

代码说明

获取参数

在PHP7中提供了两种获取参数的方法。zend_parse_parameters和FAST ZPP方式。

zend_parse_parameters

在PHP7之前一直使用zend_parse_parameters函数获取参数。这个函数的作用,就是把传入的参数转换为PHP内核中相应的类型,方便在PHP扩展中使用。
参数说明:
第一个参数,参数个数。一般就使用ZEND_NUM_ARGS(),不需要改变。
第二个参数,格式化字符串。这个格式化字符串的作用就是,指定传入参数与PHP内核类型的转换关系。

代码中 S|z 的含义就是:
S 表示参数是一个字符串。要把传入的参数转换为zend_string类型。
| 表示之后的参数是可选。可以传,也可以不传。
z 表示参数是多种类型。要把传入的参数转换为zval类型。

除此之外,还有一些specifier,需要注意:
!如果接收了一个PHP语言里的null变量,则直接把其转成C语言里的NULL,而不是封装成IS_NULL类型的zval。
/ 如果传递过来的变量与别的变量共用一个zval,而且不是引用,则进行强制分离,新的zval的is_ref__gc==0, and refcount__gc==1.

更多格式化字符串的含义可以查看官方网站。https://wiki.php.net/rfc/fast_zpp

FAST ZPP

在PHP7中新提供的方式。是为了提高参数解析的性能。对应经常使用的方法,建议使用FAST ZPP方式。
使用方式:
以ZEND_PARSE_PARAMETERS_START(1, 2)开头。
第一个参数表示必传的参数个数,第二个参数表示最多传入的参数个数。
以ZEND_PARSE_PARAMETERS_END();结束。
中间是传入参数的解析。
值得注意的是,一般FAST ZPP的宏方法与zend_parse_parameters的specifier是一一对应的。如:
Z_PARAM_OPTIONAL 对应 |
Z_PARAM_STR 对应 S
但是,Z_PARAM_ZVAL_EX方法比较特殊。它对应两个specifier,分别是 ! 和 / 。! 对应宏方法的第二个参数。/ 对应宏方法的第三个参数。如果想开启,只要设置为1即可。

FAST ZPP相应的宏方法可以查看官方网站 https://wiki.php.net/rfc/fast_zpp#proposal

返回值

方法的返回值是使用RETURN_开头的宏方法进行返回的。常用的宏方法有:
RETURN_NULL() 返回null
RETURN_LONG(l) 返回整型
RETURN_DOUBLE(d) 返回浮点型
RETURN_STR(s) 返回一个字符串。参数是一个zend_string * 指针
RETURN_STRING(s) 返回一个字符串。参数是一个char * 指针
RETURN_STRINGL(s, l) 返回一个字符串。第二个参数是字符串长度。
RETURN_EMPTY_STRING() 返回一个空字符串。
RETURN_ARR(r) 返回一个数组。参数是zend_array *指针。
RETURN_OBJ(r) 返回一个对象。参数是zend_object *指针。
RETURN_ZVAL(zv, copy, dtor) 返回任意类型。参数是 zval *指针。
RETURN_FALSE 返回false
RETURN_TRUE 返回true

关于"PHP7如何传参与返回值"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

参数 方法 字符 字符串 类型 指针 方式 个数 代码 变量 就是 更多 格式 篇文章 作用 内核 函数 含义 官方 官方网站 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 互联网科技公司排名 互联网科技公司简介 广州大一互联网络科技有限公司 互联网 科技公司 易互联网科技有限公司 成都狮子座互联网科技 科技伦理 互联网公司 互联网科技博主是什么意思 重庆威客帮互联网科技 湖北码尼互联网科技有限公司电话 互联网保险科技创业 如何创新互联网科技 爱医互联网络科技 互联网企业科技类企业如何做账 陕西九四连强互联网科技有限公司 绵阳真晨互联网科技有限公司 互联网企业和网络科技有限公司 互联网科技自媒体灵感 株洲百竞科技的互联网营销顾问 科技互联网 互联网科技股 万易互联网科技有限公司 湖北码尼互联网科技有限公司电话 消费医药和互联网科技 青海科技产业互联网发展 信承诺互联网科技有限公司 悟空问答互联网科技 玉溪新华互联网科技怎么选 数字科技和互联网金融哪个好
0