温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP7扩展开发之实现简单运算函数

发布时间:2020-09-24 10:45:05 来源:网络 阅读:1159 作者:abc965432 栏目:web开发
实现一个简单的数学计算函数,传入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

   若实现方法有误或有更好的实现方法,欢迎大家给予批评与指导。

 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI