原來筆記,就和擼代碼一樣,都很隨性。後來看的代碼和部落格多了。發現太隨性了,很難擼出高品質的代碼,很難寫出能看懂的筆記。
記筆記是一個梳理知識的過程,可以表達出自己對該知識的熟悉程度。
今天擼一段代碼,記錄一下PHP擴充中如何接收參數。
廢話就不多說了,至於基礎性的,比如如何建立擴充也不在這裡說了,如何寫接收參數的函數,只需要修改函數功能部分。昨天寫的功能部分如下:
/* 這裡是功能 這個函數不接收參數,只有傳回值。 */ PHP_FUNCTION(helloworld){ int len; char *strg; len = spprintf(&strg, 0, "%.78s", "helloworld"); RETURN_STRINGL(strg, len, 0);}
這裡實現接收參數計算a+b的值。首先接收參數的話需要在方法內添加如下代碼
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) { return; }
這裡接收參數需要瞭解如下內容,這裡接收一個整數型就需要寫入一個'l',接收兩個就寫兩個'll',以此類推,,然後在寫入接收參數後賦值給指定的變數地址,一個參數就寫一個變數,兩個就寫兩個,三個就寫三個一次類推。至於字串和其他的參數,回來同一說明。
b Booleanl 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裡貌似木有... .
修改後的代碼如下
/* 這裡是功能 這個函數不接收參數,只有傳回值。 */ 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代碼中這樣調用: