> 백엔드 개발 > PHP 튜토리얼 > PHP扩展开发-07-函数调用_PHP教程

PHP扩展开发-07-函数调用_PHP教程

WBOY
풀어 주다: 2016-07-14 10:08:29
원래의
947명이 탐색했습니다.

1      函数返回值

终于讲完zval了,前面我们讲到了函数的定义和使用,但是我们没有讲函数的返回值。因为C扩展中,函数的返回值类型为zval的,所以我们把这一节放在了这里进行讲解。
本节任务,我们写一个简单的计算器,完成加减乘除运算,要求:编写函数calculate(num1, num2, opt),我们希望完成num1 opt num2= ?的运算。我们看一下完成上面任务的代码:
PHP_FUNCTION(calculate)
{
    int num1;
    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 '-':
            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。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477781.htmlTechArticle1 函数返回值 终于讲完zval了,前面我们讲到了函数的定义和使用,但是我们没有讲函数的返回值。因为C扩展中,函数的返回值类型为zval的...
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿