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

2017-01-09 07:58:53来源:作者:人点击

实现一个简单的数学计算函数,传入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-helloEnable 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;}#elseZEND_PARSE_PARAMETERS_START(2, 3)  Z_PARAM_DOUBLE(num1)  Z_PARAM_DOUBLE(num2)  Z_PARAM_OPTIONAL  Z_PARAM_STR(type)ZEND_PARSE_PARAMETERS_END(); #endifswitch(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

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

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台