程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP擴展開發-07-函數調用

PHP擴展開發-07-函數調用

編輯:關於PHP編程

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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved