程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php擴展函數接受參數

php擴展函數接受參數

編輯:PHP綜合

除了幾個"預覽"的例外, 你迄今處理的擴展函數都很簡單, 只有返回. 然而, 多數函數並非只有一個目的. 你通常會傳遞一些參數, 並希望接收到基於值和其他附加處理的有用的響應.

zend_parse_parameters()的自動類型轉換

和上一章你看到的返回值一樣, 參數的值也是圍繞著對zval引用的間訪展開的. 獲取這些zval*的值最簡單的方法就是使用zend_parse_parameters()函數.

調用zend_parse_parameters()幾乎總是以ZEND_NUM_ARGS()宏接著是無所不在的TSRMLS_CC. ZEND_NUM_ARGS()從名字上可以猜到, 它返回int型的實際傳遞的參數個數. 由於zend_parse_parameters()內部工作的方法, 你可能不需要直接了解這個值, 因此現在只需要傳遞它.

zend_parse_parameters()的下一個參數是格式串參數, 它是由Zend引擎支持的基礎類型描述字符組成的字符序列, 用來描述要接受的函數參數. 下表是基礎的類型字符:

zend_parse_parameters()剩下的參數依賴於你的格式串中所指定的類型描述. 對於簡單類型, 直接解引用為C語言的基礎類型. 例如, long數據類型如下解出:

PHP_FUNCTION(sample_getlong)  
{  
    long foo;  
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,  
                         "l", &foo) == FAILURE) {  
        RETURN_NULL();  
    }  
    php_printf("The integer value of the parameter you "
             "passed is: %ld\n", foo);  
    RETURN_TRUE;  
}

盡管integer和long的存儲空間通常是一樣大的, 但它們並不完全一致. 嘗試將一個int類型的數據解引用到long *參數可能會帶來不期望的結果, 尤其是在64位平台上更加容易出錯. 因此, 請嚴格使用下表中列出的數據類型.

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