PHP中功能强大却少使用的函数 -- 为你提供更多的思路

来源:互联网 发布:我国消防现状数据平台 编辑:程序博客网 时间:2024/04/29 15:19

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. function a(){}   
  2. $b = get_defined_functions();   
  3. print_r($b);   
  4. //也许会显示1000多个已定义了的函数:)   
  5. ?>  
<?php   


function_exists函数判定一个函数是否存在(可以是PHP函数,也可以是自定义函数)。

  1. if (function_exists('a')) {   
  2.     echo "yes";   
  3. } else {   
  4.     echo "no";   
  5. }   
  6. function a(){}   
  7. // 显示 yes   
  8. ?>  
<?php   


call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:

  1. function a($b,$c)   
  2. {   
  3.     echo $b;   
  4.     echo $c;   
  5. }   
  6. call_user_func('a', "111","222");   
  7. call_user_func('a', "333","444");   
  8. //显示 111 222 333 444   
  9. ?>  
<?php   


调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:

  1. <?php   
  2. class a {   
  3.     function b($c)   
  4.      {   
  5.         echo $c;   
  6.      }   
  7. }   
  8. call_user_func(array("a", "b"),"111");   
  9. //显示 111   
  10. ?>  


call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:

  1. function a($b, $c)   
  2. {   
  3.     echo $b;   
  4.     echo $c;   
  5. }   
  6. call_user_func_array('a', array("111", "222"));   
  7. //显示 111 222   
  8. ?>  
<?php   


call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:

  1. function a(&$b)   
  2. {   
  3.     $b++;   
  4. }   
  5. $c = 0;   
  6. call_user_func('a', &$c);   
  7. echo $c;//显示 1   
  8. call_user_func_array('a', array(&$c));   
  9. echo $c;//显示 2   
  10. ?>  
<?php   


func_num_args函数可以获取函数接受到参数的数量:

  1. function a()   
  2. {   
  3.     echo func_num_args();   
  4. }   
  5. a(111, 222, 333);   
  6. //显示 3   
  7. ?>  
<?php   


func_get_arg函数可以获取某一个传递过来参数的值,在下面的例子中,在函数中并没有具体说明有哪些参数会被接受,利用 func_get_arg还可以获取额外的参数:

  1. function a()   
  2. {   
  3.      echo func_get_arg(1);   
  4. }   
  5. a (111, 222, 333);   
  6. //显示 222   
  7. ?>  
<?php   


func_get_args函数的作用和func_get_arg非常相似,是把所有的参数当成数组来调用:

  1. function a()   
  2. {   
  3.     $numargs = func_num_args();   
  4.     $b = func_get_args();   
  5.     for ($i = 0; $i < $numargs; $i++) {   
  6.         echo $b[$i];   
  7.      }   
  8. }   
  9. a(111, 222, 333);   
  10. //显示 111 222 333   
  11. ?>  
<?php   


create_function函数可以建立一个匿名的函数(函数名被PHP默认为lambda_1,lambda_2),样子比较古怪,但是形式比较奇特,要注意第二个参数内的语句要有“;”分隔:

  1. $newfunc = create_function('$a,$b', 'return $a + $b;');   
  2. echo $newfunc;   
  3. echo $newfunc(2, 3);   
  4. //显示 lambda_1 5   
  5. ?>  
<?php   


register_shutdown_function函数可以注册一个在页面载入完成之后运行的函数(功能有点像缓存),register_shutdown_function也可以像call_user_func函数一样用作对类内部方法的调用:

  1. function a() {   
  2.    echo   222 ;   
  3. }   
  4. echo 111;   
  5. register_shutdown_function('a');   
  6. //显示 111 222   
  7. ?>   
<?php   
  1. class a   
  2. {   
  3.    function b ($c)   
  4.     {   
  5.       echo $c;   
  6.     }   
  7. }   
  8. register_shutdown_function (array ('a', 'b'), '111');   
  9. //显示 111   
  10. ?>  
<?php   


register_tick_function函数和unregister_tick_function函数必须要和declare流程控制机制合并使用,那么就先了解一下declare和tick:

  1. statement   
  2. }  
declare (directive){   


Tick 是一个在 declare 代码段中解释器每执行 N 条低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的。在每个 tick 中出现的事件是由 register_tick_function() 来指定的。举例如下:

  1. function foo($str) {   
  2. static $i = 0;   
  3. print "$str: $i<br>";   
  4. $i++;   
  5. }   
  6. register_tick_function("foo", "count");   
  7. declare (ticks = 6) {   
  8. for($i=0; $i<20; $i++) {   
  9. echo "$i<br>";   
  10. }   
  11. }   
  12. ?>  
<?   


在这个例子中的declare(ticks = N){statement}流程控制里面,每执行6行(ticks = 6)代码,就需要运行一次foo()函数,通过更改ticks的值,我们可以获得不同的运行结果。


0 0
原创粉丝点击