實(shí)現(xiàn)一個簡單的數(shù)學(xué)計(jì)算函數(shù),傳入3個參數(shù),計(jì)算出相應(yīng)的結(jié)果。 如: 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.創(chuàng)建一個新的擴(kuò)展 ./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之前用此方式來解析參數(shù) #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.在數(shù)組中添加函數(shù)名: const zend_function_entry hello_functions[] = { PHP_FE(cal_culator, NULL) //cal_culator function } 參數(shù)解析說明: //php7之前的參數(shù)解析方法 if (zend_parse_parameters(ZEND_NUM_ARGS(),TSRMLS_CC, "dd|S", &num1, &num2,&type) == FAILURE) { return; } ZEND_NUM_ARGS() :內(nèi)置函數(shù),固定格式,【告訴Zend引擎要取的參數(shù)的信息】 TSRMLS_CC :用來確保線程安全 "dd|S" : 傳入?yún)?shù)類型【詳見下面參數(shù)類型表】可傳入2個double類型參數(shù),或傳入2個double類型參與與一個string類型參數(shù) &num1,&num2... :傳入對應(yīng)參數(shù)的存儲地址。 //php7中的參數(shù)解析方法 ZEND_PARSE_PARAMETERS_START(2, 3) //開始參數(shù)解析,最少傳2個參數(shù),最多3個參數(shù) Z_PARAM_DOUBLE(num1) //將第一個參數(shù)轉(zhuǎn)換為double類型,傳入?yún)?shù)存儲地址 Z_PARAM_DOUBLE(num2) //將第二個參數(shù)轉(zhuǎn)換為double類型, 傳入?yún)?shù)存儲地址 Z_PARAM_OPTIONAL //表示|,意為后面的參數(shù)可以不傳 Z_PARAM_STR(type) //第3個參數(shù)轉(zhuǎn)換為string類型, 傳入?yún)?shù)存儲地址 ZEND_PARSE_PARAMETERS_END(); //結(jié)束參數(shù)解析 參數(shù)類型表: d: double 類型 s: string 類型 l:long 類型 |:或的意思,表示后面的可傳可不傳 返回值說明: RETURN_DOUBLE :返回浮點(diǎn)型 RETURN_LONG :返回整型 4.編譯安裝擴(kuò)展, phpize ./configure --with-php-config=php_conf_dir make && make install vi php.ini extension=strive.so reload php-fpm 5.測試cal_culator函數(shù)是否可用: php -r 'echo cal_culator(10,40,'+');'
源碼地址:https://github.com/yq918/php-ext-strive.git
成都創(chuàng)新互聯(lián)公司主營工農(nóng)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),工農(nóng)h5微信小程序定制開發(fā)搭建,工農(nóng)網(wǎng)站營銷推廣歡迎工農(nóng)等地區(qū)企業(yè)咨詢
若實(shí)現(xiàn)方法有誤或有更好的實(shí)現(xiàn)方法,歡迎大家給予批評與指導(dǎo)。
本文名稱:PHP7擴(kuò)展開發(fā)之實(shí)現(xiàn)簡單運(yùn)算函數(shù)
文章來源:http://www.rwnh.cn/article16/jcjpdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、品牌網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、網(wǎng)站制作、App開發(fā)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)