本文实例讲述了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函数和自定义的函数:
1
2
3
4
5
6
|
<?php function a(){} $b = get_defined_functions(); print_r( $b ); //也许会显示1000多个已定义了的函数:) ?> |
function_exists函数判定一个函数是否存在(可以是PHP函数,也可以是自定义函数)。
1
2
3
4
5
6
7
8
9
|
<?php if (function_exists( 'a' )) { echo "yes" ; } else { echo "no" ; } function a(){} // 显示 yes ?> |
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:
1
2
3
4
5
6
7
8
9
10
|
<?php function a( $b , $c ) { echo $b ; echo $c ; } call_user_func( 'a' , "111" , "222" ); call_user_func( 'a' , "333" , "444" ); //显示 111 222 333 444 ?> |
调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:
1
2
3
4
5
6
7
8
9
10
|
<?php class a { function b( $c ) { echo $c ; } } call_user_func( array ( "a" , "b" ), "111" ); //显示 111 ?> |
call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:
1
2
3
4
5
6
7
8
9
|
<?php function a( $b , $c ) { echo $b ; echo $c ; } call_user_func_array( 'a' , array ( "111" , "222" )); //显示 111 222 ?> |
call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:
1
2
3
4
5
6
7
8
9
10
11
|
<?php function a(& $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函数可以获取函数接受到参数的数量:
1
2
3
4
5
6
7
8
|
<?php function a() { echo func_num_args(); } a(111, 222, 333); //显示 3 ?> |
func_get_arg函数可以获取某一个传递过来参数的值,在下面的例子中,在函数中并没有具体说明有哪些参数会被接受,利用func_get_arg还可以获取额外的参数:
1
2
3
4
5
6
7
8
|
<?php function a() { echo func_get_arg(1); } a (111, 222, 333); //显示 222 ?> |
func_get_args函数的作用和func_get_arg非常相似,是把所有的参数当成数组来调用:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php function a() { $numargs = func_num_args(); $b = func_get_args(); for ( $i = 0; $i < $numargs ; $i ++) { echo $b [ $i ]; } } a(111, 222, 333); //显示 111 222 333 ?> |
create_function函数可以建立一个匿名的函数(函数名被PHP默认为lambda_1,lambda_2),样子比较古怪,但是形式比较奇特,要注意第二个参数内的语句要有“;”分隔:
1
2
3
4
5
6
|
<?php $newfunc = create_function( '$a,$b' , 'return $a + $b;' ); echo $newfunc ; echo $newfunc (2, 3); //显示 lambda_1 5 ?> |
register_shutdown_function函数可以注册一个在页面载入完成之后运行的函数(功能有点像缓存),register_shutdown_function也可以像call_user_func函数一样用作对类内部方法的调用:
1
2
3
4
5
6
7
8
|
<?php function a() { echo 222 ; } echo 111; register_shutdown_function( 'a' ); //显示 111 222 ?> |
1
2
3
4
5
6
7
8
9
10
11
|
<?php class a { function b ( $c ) { echo $c ; } } register_shutdown_function ( array ( 'a' , 'b' ), '111' ); //显示 111 ?> |
register_tick_function函数和unregister_tick_function函数必须要和declare流程控制机制合并使用,那么就先了解一下declare和tick:
1
2
3
|
declare (directive){ statement } |
Tick 是一个在 declare 代码段中解释器每执行 N 条低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的。在每个 tick 中出现的事件是由 register_tick_function() 来指定的。举例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<? function foo( $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程序设计有所帮助。