原來筆記,就和擼代碼同樣,都很隨性。後來看的代碼和博客多了。發現太隨性了,很難擼出高質量的代碼,很難寫出能看懂的筆記。php
記筆記是一個梳理知識的過程,能夠表達出本身對該知識的熟悉程度。數組
今天擼一段代碼,記錄一下PHP擴展中如何接收參數。函數
廢話就很少說了,至於基礎性的,好比如何建立擴展也不在這裏說了,如何寫接收參數的函數,只須要修改函數功能部分。昨天寫的功能部分以下:spa
/* 這裏是功能 這個函數不接收參數,只有返回值。 */ PHP_FUNCTION(helloworld) { int len; char *strg; len = spprintf(&strg, 0, "%.78s", "helloworld"); RETURN_STRINGL(strg, len, 0); }
這裏實現接收參數計算a+b的值。首先接收參數的話須要在方法內添加以下代碼code
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) { return; }
這裏接收參數須要瞭解以下內容,這裏接收一個整數型就須要寫入一個'l',接收兩個就寫兩個'll',以此類推,,而後在寫入接收參數後賦值給指定的變量地址,一個參數就寫一個變量,兩個就寫兩個,三個就寫三個一次類推。至於字符串和其餘的參數,回來同一說明。對象
b Boolean l Integer 整型 d Floating point 浮點型 s String 字符串 r Resource 資源 a Array 數組 o Object instance 對象 O Object instance of a specified type 特定類型的對象 z Non-specific zval 任意類型~ Z zval**類型 f 表示函數、方法名稱,PHP5.1裏貌似木有... .
修改後的代碼以下ci
/* 這裏是功能 這個函數不接收參數,只有返回值。 */ PHP_FUNCTION(helloworld) { int a; int b; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) { return; } int c; c=a+b; RETURN_LONG(c); }
就這樣,一個加法計算的函數就算完成了。接下來編譯啓動。而後在PHP代碼中這樣調用:資源
<?php echo helloworld(1,3);