实现一个简单的数学计算函数,传入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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。