问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在PHP中如何正确创建函数

发布网友 发布时间:2022-05-07 19:51

我来回答

1个回答

热心网友 时间:2022-04-18 11:40

Step 1 =>

php的扩展模块都放在 ext/ 目录下,比如说 snmp模块、mysql模块。 我们要建立自己的模块,就要在ext目录下为自己的模块建一个目录。比如,我们要做一个分析config文件的模块,命名为pconfig模块(parse config的简写),需在ext下建立目录pconfig。将我写好的7个文件copy到该目录下,另外需对主目录下的configure和internal_functions.c作一些修改。

Step 2 =>

Makefile.am Makefile.in

是模板文件,用户执行configure时,会调用这两个文件,生成编译时所用的Makefile文件。修改时将小写的pconfig换成你自己的模块名,别忘了把大写的PCONFIG也替换掉(不要告诉我你不会vi的替换语句)。config.m4也是执行configure将会调用的检测脚本程序,以后我们来讨论这些脚本程序的更深入的修改。现在你只需要把pconfig该成你的模块就可以了。对config.h.stub和setup.stub也如法炮制。其实setup.stub也没什么用。

Step 3 =>

php3-pconfig.h 头文件中

extern php3_mole_entry pconfig_mole_entry;

#define pconfig_mole_ptr &pconfig_mole_entry

#define phpext_pconfig_ptr pconfig_mole_ptr

这几行定义了模块的入口,将入口注册到php后,php会通过模块入口找到你写的函数

下面几个函数定义是用宏进行定义的,展开以后其实就是 php3_minit_pconfig , php3_rinit_pconfig ……分别在你的模块初试化或结束时被调用,如果你的模块很简单,也就不需要这些定义了

extern PHP_MINIT_FUNCTION(pconfig);

extern PHP_RINIT_FUNCTION(pconfig);

extern PHP_MSHUTDOWN_FUNCTION(pconfig);

PHP_MINFO_FUNCTION(pconfig);

这是你的函数声明,将来写在php脚本语句中的函数名就是在PHP_FUNCTION中定义的名字。

PHP_FUNCTION(pconfig_test);

如果有多个,还可以继续往下加

PHP_FUNCTION(pconfig_parsefile);

PHP_FUNCTION(pconfig_release); …….

Step 4 =>

接下来我们看最重点的C代码了

function_entry pconfig_functions[] = {

PHP_FE(pconfig_test, NULL)

{NULL, NULL, NULL}

};

定义的是你的函数的入口(前面我们提到过模块的入口),按照格式将你在头文件中定义的函数写进去吧。注意,这是用宏定义的,不要管语法是否正确。以后我们具体讨论这些宏的用法。

php3_mole_entry pconfig_mole_entry = {

"pconfig", pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES

};

注册模块的入口信息,比如模块名,函数接口,初试化模块将调用的函数等等,如果你的模块不执行复杂操作的话,可以忽略掉他们,写成

php3_mole_entry pconfig_mole_entry = {

"pconfig", pconfig_functions, NULL,NULL,NULL,NULL,NULL,STANDARD_MODULE_PROPERTIES

};

Step 5 =>

写你自己的函数

在头文件和function_entry处,我们已经定义了自己的函数pconfig_test,现在我们就来实现pconfig_test的功能。就比如执行两个数相加的和吧。

static void _php3_pconfig_test(INTERNAL_FUNCTION_PARAMETERS)

{ ......

}

PHP_FUNCTION(pconfig_test)

{

_php3_pconfig_test(INTERNAL_FUNCTION_PARAM_PASSTHRU);

}

当系统调用pconfig_test时,会调用你的_php3_pconfig_test函数,当然你也可以把_php3_pconfig_test里的内容直接写在PHP_FUNCTION(pconfig_test)中,这样做只是程序结构比较清晰。注意:不要将_php3_pconfig_test命名成php3_pconfig_test,PHP_FUNCTION(pconfig_test)宏展开后实际上就是php3_pconfig_test!

Step 6 =>

好了,现在我们开始修改configure,在echo $ac_n "checking for MySQL support""... $ac_c" 1>&6的前面(当然,如果你熟悉configure的话,可以加在任何合适的地方)加上下面几句话

if test "${with_pconfig+set}" = set; then

withval="$with_pconfig"

# Add your lib in here

EXTRA_LIBS="$EXTRA_LIBS"

# Add your include path in here

INCLUDES="$INCLUDES"

EXT_SUBDIRS="$EXT_SUBDIRS pconfig"

EXT_LIBS="$EXT_LIBS pconfig/libphpext_pconfig.a"

EXTINFO_DEPS="$EXTINFO_DEPS ../ext/pconfig/extinfo.c.stub"

EXT_STATIC="$EXT_STATIC pconfig"

fi

修改internal_functions.c,在头文件定义中加入#include "ext/pconfig/php3_pconfig.h"

在zend_mole_entry数组中加入phpext_pconfig_ptr,

Step 7 =>

从新configure,带上需要的参数,不要忘记的是在参数里加入 --with-pconfig

Step 8 =>

index.php3

<? echo pconfig_test(123,678)."

"; ?>

执行%>php index.php3

810
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
叶罗丽精灵梦小游戏有吗? 女孩爱玩化妆换衣服的游戏 洋娃娃类似的游戏推荐 女生换装小游戏有哪些 哪一个换装游戏是古代的宫廷小花仙 女生换装小游戏有哪些 有没有比较好玩的纯古风换装单机游戏啊 父母走了,如何怀念? 如何在失去亲人后怀念他们呢? 父亲过世,如何怀念 U盘损坏数据恢复的有效方法使用专业工具和技巧来恢复U盘中的损坏... ...格式化的U盘中的数据文件简单有效的数据恢复方法和注意事项_百度知 ... 手机格式化恢复技巧教你简单有效地恢复误格式化的手机数据 笔记本显卡排行榜 谁知道NVIDIA笔记本显卡的排行? 还有比布加迪速度快的车吗? 极速汽车模拟驾驶能拿什么游戏修改器修改 人像素描和素描头像有什么不同 素描人像 设计插图合同协议书范本 请问顾宏伟老七浦路市场什么时候动迁 七浦路的介绍 上海七浦路里面几层楼买东西是怎么分配的??? 2020年上海七浦路为什么生意不好了?? 在上海买个店铺要多少钱啊 地方不用很大 13平左右就可以 做服装生意 七浦路几点关门 问下,七浦路的兴旺 七浦路的历史沿革 上海七浦路批发市场除了服饰批发,有没有小饰品之类的批发呢,上海城隍庙旁边的批发市场有吗 抵押贷款商铺抵押地址位于 上海七浦路,面积2959平 春节前七浦路商铺还营业吗 上海七浦路商铺多少钱一平方米 有谁知道现在七浦路兴旺那里的一间商铺卖到多少钱吗? php 定义函数function($a=&#39;&#39;){...},这个=&#39;&#39;是啥意思? php函数能否先调用再定义函数体 PHP自定义函数名称前加&有什么作用 PHP自定义函数和自定义变量 php自定义函数前加个&有什么用? 不小心把C盘文件删除了,桌面上的文件都打不开了怎么办求大神帮助 我把c盘清理了一下,然后打开电脑就出现下面这个情况,好多软件都打不开,这是怎么回事,哪位好心人帮忙 删除电脑C盘东西后,桌面的文件没啦,文件打不开,速度很慢,怎么办 不小心删除了戴尔电脑里C盘文件夹,导致的笔记本电脑所有的软件包括浏览器和卫士都打不开,该怎么办? 在C盘删了些东西后 所有这类文件就打不开了原因是什么 删除C盘中的文件导致电脑打不开怎么办? 我前两天晚上喝了红参炖鸡汤,睡到半夜4点多就觉得心口... 喝了人参鸡汤人很累没力气头晕胃也不舒服怎么回事吗 我今天早晨喝了2两碗,一碗的人参鸡汤,过了不到1小时,就开始肚子疼,胃疼,后来拉肚子了,和喝鸡汤有关 未婚少女喝高丽参鸡汤有副作用吗? 吃了人参炖鸡感觉身体热突然好累 喝了人参鸡汤后脸开始浮肿,眼睛胀痛,我妈,50岁,有脑供血不足,肾功能查了没问题,到底咋回事呢 我女友从韩国回来,在韩国喝了高参鸡汤,回来后恶心饮食不思,事物上下摇摆,胃疼,口苦,碰巧我和她zuo EXCEL中关于下拉累计求和的。 高丽参鸡汤喝不完,过夜还可以喝吗