php擴充函數接受參數

來源:互聯網
上載者:User

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

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位平台上更加容易出錯. 因此, 請嚴格使用下表中列出的資料類型.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.