您好,登錄后才能下訂單哦!
實現一個簡單的數學計算函數,傳入3個參數,計算出相應的結果。 如: echo "90+20=".cal_culator(90,20,'+'); echo "90-20=".cal_culator(90,20,'-'); echo "90*20=". cal_culator(90,20,'*'); echo "90/20=". cal_culator(90,20,'/'); echo "90%20=". cal_culator(90,20,'%'); 1.創建一個新的擴展 ./ext_skel --extname=hello 2.vi config.m4 去掉以下3行行首的dnl PHP_ARG_ENABLE(hello, whether to enable strive support, Make sure that the comment is aligned: [ --enable-hello Enable strive support]) 3,編寫代碼 1.vi hello.c 2.#添加下面的代碼 PHP_FUNCTION(cal_culator) { double num1 = 0.0; double num2 = 0.0; zend_string *type; //php7之前用此方式來解析參數 #ifndef FAST_ZPP if (zend_parse_parameters(ZEND_NUM_ARGS(),TSRMLS_CC, "dd|S", &num1, &num2,&type) == FAILURE) { return; } #else ZEND_PARSE_PARAMETERS_START(2, 3) Z_PARAM_DOUBLE(num1) Z_PARAM_DOUBLE(num2) Z_PARAM_OPTIONAL Z_PARAM_STR(type) ZEND_PARSE_PARAMETERS_END(); #endif switch(ZSTR_VAL(type)[0]) { case '+': RETURN_DOUBLE(num1+num2); break; case '-': RETURN_DOUBLE(num1-num2); break; case '*': RETURN_DOUBLE(num1*num2); break; case '/': RETURN_DOUBLE(num1/num2); break; case '%': RETURN_LONG((int)num1%(int)num2); break; } } 3.在數組中添加函數名: const zend_function_entry hello_functions[] = { PHP_FE(cal_culator, NULL) //cal_culator function } 參數解析說明: //php7之前的參數解析方法 if (zend_parse_parameters(ZEND_NUM_ARGS(),TSRMLS_CC, "dd|S", &num1, &num2,&type) == FAILURE) { return; } ZEND_NUM_ARGS() :內置函數,固定格式,【告訴Zend引擎要取的參數的信息】 TSRMLS_CC :用來確保線程安全 "dd|S" : 傳入參數類型【詳見下面參數類型表】可傳入2個double類型參數,或傳入2個double類型參與與一個string類型參數 &num1,&num2... :傳入對應參數的存儲地址。 //php7中的參數解析方法 ZEND_PARSE_PARAMETERS_START(2, 3) //開始參數解析,最少傳2個參數,最多3個參數 Z_PARAM_DOUBLE(num1) //將第一個參數轉換為double類型,傳入參數存儲地址 Z_PARAM_DOUBLE(num2) //將第二個參數轉換為double類型, 傳入參數存儲地址 Z_PARAM_OPTIONAL //表示|,意為后面的參數可以不傳 Z_PARAM_STR(type) //第3個參數轉換為string類型, 傳入參數存儲地址 ZEND_PARSE_PARAMETERS_END(); //結束參數解析 參數類型表: d: double 類型 s: string 類型 l:long 類型 |:或的意思,表示后面的可傳可不傳 返回值說明: RETURN_DOUBLE :返回浮點型 RETURN_LONG :返回整型 4.編譯安裝擴展, phpize ./configure --with-php-config=php_conf_dir make && make install vi php.ini extension=strive.so reload php-fpm 5.測試cal_culator函數是否可用: php -r 'echo cal_culator(10,40,'+');'
源碼地址:https://github.com/yq918/php-ext-strive.git
若實現方法有誤或有更好的實現方法,歡迎大家給予批評與指導。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。