PHP7擴(kuò)展開發(fā)之實(shí)現(xiàn)簡單運(yùn)算函數(shù)

實(shí)現(xiàn)一個(gè)簡單的數(shù)學(xué)計(jì)算函數(shù),傳入3個(gè)參數(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)建一個(gè)新的擴(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個(gè)double類型參數(shù),或傳入2個(gè)double類型參與與一個(gè)string類型參數(shù)
      &num1,&num2...  :傳入對(duì)應(yīng)參數(shù)的存儲(chǔ)地址。  
       
     //php7中的參數(shù)解析方法                 
         ZEND_PARSE_PARAMETERS_START(2, 3)     //開始參數(shù)解析,最少傳2個(gè)參數(shù),最多3個(gè)參數(shù)
          Z_PARAM_DOUBLE(num1)       //將第一個(gè)參數(shù)轉(zhuǎn)換為double類型,傳入?yún)?shù)存儲(chǔ)地址
          Z_PARAM_DOUBLE(num2)       //將第二個(gè)參數(shù)轉(zhuǎn)換為double類型, 傳入?yún)?shù)存儲(chǔ)地址
          Z_PARAM_OPTIONAL         //表示|,意為后面的參數(shù)可以不傳
          Z_PARAM_STR(type)        //第3個(gè)參數(shù)轉(zhuǎn)換為string類型, 傳入?yún)?shù)存儲(chǔ)地址
        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.測(cè)試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)方法,歡迎大家給予批評(píng)與指導(dǎo)。

 

本文名稱:PHP7擴(kuò)展開發(fā)之實(shí)現(xiàn)簡單運(yùn)算函數(shù)
文章來源:http://muchs.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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)