首页 > php教程 > php手册 > 正文

PHP扩展开发-07-函数调用

php中文网
发布: 2016-06-13 10:54:31
原创
1427人浏览过

1      函数返回值

终于讲完zval了,前面我们讲到了函数的定义和使用,但是我们没有讲函数的返回值。因为c扩展中,函数的返回值类型为zval的,所以我们把这一节放在了这里进行讲解。

本节任务,我们写一个简单的计算器,完成加减乘除运算,要求:编写函数calculate(num1, num2, opt),我们希望完成num1 opt num2= ?的运算。我们看一下完成上面任务的代码:

PHP_FUNCTION(calculate)

{

    int num1;

立即学习PHP免费学习笔记(深入)”;

    int num2;

    char* opt;

    int opt_len;

if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls",

&num1, &num2, &opt, &opt_len) ==FAILURE)

    {

        php_printf("param error. example: calculate(123, 456, '+')\n");

        RETURN_NULL();

    }

    if(1 != opt_len)

    {

        php_printf("param error. example: calculate(123, 456, '+')\n");

        RETURN_NULL();

    }

    switch (opt[0])

    {

        case '+':

            return_value->type = IS_LONG;

            return_value->value.lval = num1 + num2;

            break;

        case '-':

PHPOK企业建站系统
PHPOK企业建站系统

采用PHP+MYSQL语言开发,是一套成熟完善的企业站CMS系统,函盖功能全面,自定义功能强大,扩展性较好、安全性较高,可轻松解决大部分企业站需求。

PHPOK企业建站系统 1475
查看详情 PHPOK企业建站系统

            return_value->type = IS_LONG;

            return_value->value.lval = num1 - num2;

            break;

        case '*':

            return_value->type = IS_LONG;

            return_value->value.lval = num1 * num2;

            break;

        case '/':

            return_value->type = IS_DOUBLE;

            return_value->value.lval = num1 * 1.0 / num2;

            break;

        default:

            return_value->type = IS_LONG;

            return_value->value.lval = 0;

            break;

    }

}

看到上面代码,不知道大家有没有疑惑,return_value是怎么来的?

return_value是你宏PHP_FUNCTION宏中定义的,PHP_FUNCTION会声明这个变量,并且将这个变量赋值为NULL,我们来看一下宏定义:

#define ZEND_NAMED_FUNCTION(name)       void name(INTERNAL_FUNCTION_PARAMETERS)

#define ZEND_FUNCTION(name)             ZEND_NAMED_FUNCTION(ZEND_FN(name))

#define INTERNAL_FUNCTION_PARAMETERSint ht, zval *return_value,   \

zval **return_value_ptr, zval *this_ptr, intreturn_value_used TSRMLS_DC

         从上面的宏定义来看,return_value就是zval的一个指针,php用这个变量来指向函数的返回值。其实我们也有一个宏可以进行简单的返回,宏定义如下,RETVAL_*(v),*表示的就是各种变量类型,v表示变量的值,例如RETVAL_LONG(34),将返回一个long类型的数值,其值为34。

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号