PHP中功能强大却很少使用的函数实例小结
本文实例讲述了PHP中功能强大却很少使用的函数。分享给大家供大家参考,具体如下:
call_user_func_array—让参数以数组的形式调用一个函数
call_user_func—调用一个存在的函数
create_function—建立一个函数
func_get_arg—获取函数中某个参数的值
func_get_args—获取函数的所有参数并组成数组
func_num_args—获取一个函数的参数个数
function_exists—判定一个函数是否存在
get_defined_functions—获取已有的函数信息
register_shutdown_function—注册一个页面载入完成后运行的函数
register_tick_function—注册一个按要求调用的函数
unregister_tick_function—取消一个按要求调用的函数
get_defined_functions可以获取所有的PHP函数和自定义的函数:
<?php
functiona(){}
$b=get_defined_functions();
print_r($b);
//也许会显示1000多个已定义了的函数:)
?>
function_exists函数判定一个函数是否存在(可以是PHP函数,也可以是自定义函数)。
<?php
if(function_exists('a')){
echo"yes";
}else{
echo"no";
}
functiona(){}
//显示yes
?>
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:
<?php
functiona($b,$c)
{
echo$b;
echo$c;
}
call_user_func('a',"111","222");
call_user_func('a',"333","444");
//显示111222333444
?>
调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:
<?php
classa{
functionb($c)
{
echo$c;
}
}
call_user_func(array("a","b"),"111");
//显示111
?>
call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:
<?php
functiona($b,$c)
{
echo$b;
echo$c;
}
call_user_func_array('a',array("111","222"));
//显示111222
?>
call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:
<?php
functiona(&$b)
{
$b++;
}
$c=0;
call_user_func('a',&$c);
echo$c;//显示1
call_user_func_array('a',array(&$c));
echo$c;//显示2
?>
func_num_args函数可以获取函数接受到参数的数量:
<?php
functiona()
{
echofunc_num_args();
}
a(111,222,333);
//显示3
?>
func_get_arg函数可以获取某一个传递过来参数的值,在下面的例子中,在函数中并没有具体说明有哪些参数会被接受,利用func_get_arg还可以获取额外的参数:
<?php
functiona()
{
echofunc_get_arg(1);
}
a(111,222,333);
//显示222
?>
func_get_args函数的作用和func_get_arg非常相似,是把所有的参数当成数组来调用:
<?php
functiona()
{
$numargs=func_num_args();
$b=func_get_args();
for($i=0;$i<$numargs;$i++){
echo$b[$i];
}
}
a(111,222,333);
//显示111222333
?>
create_function函数可以建立一个匿名的函数(函数名被PHP默认为lambda_1,lambda_2),样子比较古怪,但是形式比较奇特,要注意第二个参数内的语句要有“;”分隔:
<?php
$newfunc=create_function('$a,$b','return$a+$b;');
echo$newfunc;
echo$newfunc(2,3);
//显示lambda_15
?>
register_shutdown_function函数可以注册一个在页面载入完成之后运行的函数(功能有点像缓存),register_shutdown_function也可以像call_user_func函数一样用作对类内部方法的调用:
<?php
functiona(){
echo222;
}
echo111;
register_shutdown_function('a');
//显示111222
?>
<?php
classa
{
functionb($c)
{
echo$c;
}
}
register_shutdown_function(array('a','b'),'111');
//显示111
?>
register_tick_function函数和unregister_tick_function函数必须要和declare流程控制机制合并使用,那么就先了解一下declare和tick:
declare(directive){
statement
}
Tick是一个在declare代码段中解释器每执行N条低级语句就会发生的事件。N的值是在declare中的directive部分用ticks=N来指定的。在每个tick中出现的事件是由register_tick_function()来指定的。举例如下:
<?
functionfoo($str){
static$i=0;
print"$str:$i<br>";
$i++;
}
register_tick_function("foo","count");
declare(ticks=6){
for($i=0;$i<20;$i++){
echo"$i<br>";
}
}
?>
在这个例子中的declare(ticks=N){statement}流程控制里面,每执行6行(ticks=6)代码,就需要运行一次foo()函数,通过更改ticks的值,我们可以获得不同的运行结果。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php+mysql数据库操作入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。