Home >Backend Development >PHP Tutorial >PHP extension development-07-function call_PHP tutorial

PHP extension development-07-function call_PHP tutorial

WBOY
WBOYOriginal
2016-07-14 10:08:29958browse

1 Function return value

Finally finished talking about zval. Earlier we talked about the definition and use of functions, but we did not talk about the return value of the function. Because in the C extension, the return value type of the function is zval, so we put this section here to explain.
Assignments in this section, we write a simple calculator to complete addition, subtraction, multiplication and division operations. Requirements: Write the function calculate(num1, num2, opt). We hope to complete num1 opt num2=? operation. Let’s take a look at the code that accomplishes the above task:
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;
}
}
Seeing the above code, I wonder if you have any doubts about where return_value comes from?
return_value is defined in your macro PHP_FUNCTION. PHP_FUNCTION will declare this variable and assign this variable to NULL. Let’s take a look at the macro definition:
#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
From the macro definition above, return_value is a pointer to zval. PHP uses this variable to point to the return value of the function. In fact, we also have a macro that can perform simple returns. The macro definition is as follows, RETVAL_*(v), * represents various variable types, v represents the value of the variable, for example, RETVAL_LONG(34), which will return a long value. Its value is 34.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/477781.htmlTechArticle1 Function return value Finally finished talking about zval. We talked about the definition and use of functions earlier, but we didn’t talk about it. The return value of the function. Because in the C extension, the return value type of the function is zval...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn