PHP擴充開發-07-函數調用_PHP教程

來源:互聯網
上載者:User
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。

http://www.bkjia.com/PHPjc/477781.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477781.htmlTechArticle1 函數傳回值 終於講完zval了,前面我們講到了函數的定義和使用,但是我們沒有講函數的傳回值。因為C擴充中,函數的傳回值類型為zval的...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.