先定义阶乘运算函数
function factorial ($input_num){try{
if (!is_int($input_num)){
throw new Exception ('输入必须是一个整数');
}
if ($input_num < 1){
throw new Exception ('输入必须是大于1的整数');
}
$produce = 1;
for ($i=1; $i <= $input_num ; $i++){
$produce = $produce $i;
}
//$input_num = (int)($input_num);
return $produce;
}
catch ( Exception $e ) {
echo $e -> getMessage ();
exit;
}
}
然后 定义 你需要的 数列 计算公式,是就是 偶数 的阶乘之和
所以可以这样
function sumeven ($maxfornum){try{
if (!is_int($maxfornum)){
throw new Exception ('输入必须是一个整数');
}
if ($maxfornum < 2){
throw new Exception ('输入必须是大于1的整数');
}
$sigma = 0;
for ($i = 2 ; $i <= $maxfornum; $i = $i + 2){
$sigma += factorial($i); //这里调用之前定义的函数
}
return $sigma;
}
catch ( Exception $e ) {
echo $e -> getMessage ();
exit;
}
}
然后 调用sumeven 方法并传入数列最大值,回显调用结果即可
注意 我用了try+抛出异常的 形式来表达错误参数传入。可自行修改
function 就是自定义函数
如:
function jia($a) {
$b = $a+10;
return $b;
}
以上就是一个自定义函数,下面看看怎么使用它
echo jia(‘10’);
显示结果为20 //这里jia就是自定义的函数名,这样只要给$a任何数字返回的结果都为+10的结果,这样就是自定义了一个函数,这个例子是很简单的~ 不过通过自定义函数你会发现一切变得更好实现,加油 O(∩_∩)O
Step 1 =>
php的扩展模块都放在 ext/ 目录下,比如说 snmp模块、mysql模块。 我们要建立自己的模块,就要在ext目录下为自己的模块建一个目录。比如,我们要做一个分析config文件的模块,命名为pconfig模块(parse config的简写),需在ext下建立目录pconfig。将我写好的7个文件copy到该目录下,另外需对主目录下的configure和internal_functionsc作一些修改。
Step 2 =>
Makefileam Makefilein
是模板文件,用户执行configure时,会调用这两个文件,生成编译时所用的Makefile文件。修改时将小写的pconfig换成你自己的模块名,别忘了把大写的PCONFIG也替换掉(不要告诉我你不会vi的替换语句)。configm4也是执行configure将会调用的检测脚本程序,以后我们来讨论这些脚本程序的更深入的修改。现在你只需要把pconfig该成你的模块就可以了。对confighstub和setupstub也如法炮制。其实setupstub也没什么用。
Step 3 =>
php3-pconfigh 头文件中
extern php3_module_entry pconfig_module_entry;
#define pconfig_module_ptr &pconfig_module_entry
#define phpext_pconfig_ptr pconfig_module_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_module_entry pconfig_module_entry = {
"pconfig", pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES
};
注册模块的入口信息,比如模块名,函数接口,初试化模块将调用的函数等等,如果你的模块不执行复杂 *** 作的话,可以忽略掉他们,写成
php3_module_entry pconfig_module_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_pconfiga"
EXTINFO_DEPS="$EXTINFO_DEPS /ext/pconfig/extinfocstub"
EXT_STATIC="$EXT_STATIC pconfig"
fi
修改internal_functionsc,在头文件定义中加入#include "ext/pconfig/php3_pconfigh"
在zend_module_entry数组中加入phpext_pconfig_ptr,
Step 7 =>
从新configure,带上需要的参数,不要忘记的是在参数里加入 --with-pconfig
Step 8 =>
indexphp3
< echo pconfig_test(123,678)"
"; >
执行%>php indexphp3
810
preg_match()函数用于正则表达式知识匹配,如果成功则返回1,否则返回0。
Preg_match()在成功匹配之后停止匹配,如果要实现所有结果的内部匹配,则使用preg_match_all()函数。
php函数取得字符串长度:
1.首先,创建一个新的PHP文件并将其命名为test.php。
2.在test.php文件中,定义两个字符串,一个是纯英文字符串,另一个是中英文混合字符串。
3.使用strlen()方法来计算长度,从程序执行结果来看,strlen()方法计算的字符串长度$Str1是正确的,第二个字符串$Str2是错误的。
4.创建一个新的utf8_strlen()函数,并将其参数定义为$string,默认为null。
5.在utf8_strlen()函数中,使用preg_match_all()方法通过正则表达式分割字符串,并将其保存在$match变量中。最后,计算从count()方法获得的数组元素的数量,并返回结果。
6.使用utf8_strlen()分别计算$Str1和$Str2字符串的长度,并使用echo将结果输出到页面。
7.在浏览器中运行test.php文件并查看程序执行的结果。从这两个结果可以看出,统计字符串长度已经成功实现。
网页链接
__construct()//类每次实例化的时候调用
__destruct()//类释放资源的时候调用
__call()//$this->method() method不存在的时候调用
__callStatic()//new test()::method() method不存在的时候调用
_get()//获取不可访问的类内部变量调用。包括private protected 和不存在的时候
__set()///赋值不可访问的类内部变量调用。包括private protected 和不存在的时候
__isset()//判断不可访问的类内部变量调用
__unset()//删除不可访问的类内部变量调用
__sleep()//序列化类的时候调用 serialize(new teset)
__wakeup()//反序列化的时候调用unserialize(new teset)
__toString()// 字符串的方式调用类 echo new test();
__invoke()//函数方式调用类test(2);
__set_state()//var_export(类)调用
__clone()//克隆的时候调用$obj2 = clone $obj;
__debugInfo//var_dump(new test())调用
后面是链接带的参数和值,相当于http://wwwbaiducom/indexphpa=1&b=2
就是说这个页面带过去a=1 b=2 可以获取这两个变量的值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)