PHP中功能强大却很少使用的函数实例小结

5年以前  |  阅读数:1103 次  |  编程语言: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
    function a(){}
    $b = get_defined_functions();
    print_r($b);
    //也许会显示1000多个已定义了的函数:)
    ?>

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


    <?php
    if (function_exists('a')) {
      echo "yes";
    } else {
      echo "no";
    }
    function a(){}
    // 显示 yes
    ?>

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


    <?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,也是满有新意的:


    <?php
    class a {
      function b($c)
      {
        echo $c;
      }
    }
    call_user_func(array("a", "b"),"111");
    //显示 111
    ?>

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


    <?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函数都支持引用,这让他们和普通的函数调用更趋于功能一致:


    <?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函数可以获取函数接受到参数的数量:


    <?php
    function a()
    {
      echo func_num_args();
    }
    a(111, 222, 333);
    //显示 3
    ?>

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


    <?php
    function a()
    {
       echo func_get_arg(1);
    }
    a (111, 222, 333);
    //显示 222
    ?>

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


    <?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),样子比较古怪,但是形式比较奇特,要注意第二个参数内的语句要有";"分隔:


    <?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函数一样用作对类内部方法的调用:


    <?php
    function a() {
      echo 222 ;
    }
    echo 111;
    register_shutdown_function('a');
    //显示 111 222
    ?>


    <?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:


    declare (directive){
    statement
    }

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


    <?
    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相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php+mysql数据库操作入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例