zoukankan      html  css  js  c++  java
  • PHP函数处理函数实例详解

    1. call_user_func和call_user_func_array: 

        以上两个函数以不同的参数形式调用回调函数。见如下示例:  

    <?php
    class AnotherTestClass {
        public static function printMe() {
            print "This is Test2::printSelf.
    ";
        }
        public function doSomething() {
            print "This is Test2::doSomething.
    ";
        }
        public function doSomethingWithArgs($arg1, $arg2) {
            print 'This is Test2::doSomethingWithArgs with ($arg1 = '.$arg1.' and $arg2 = '.$arg2.").
    ";
        }
    }
    
    $testObj = new AnotherTestClass();
    call_user_func(array("AnotherTestClass", "printMe"));
    call_user_func(array($testObj, "doSomething"));
    call_user_func(array($testObj, "doSomethingWithArgs"),"hello","world");
    call_user_func_array(array($testObj, "doSomethingWithArgs"),array("hello2","world2"));

        运行结果如下:

    bogon:TestPhp$ php call_user_func_test.php 
    This is Test2::printSelf.
    This is Test2::doSomething.
    This is Test2::doSomethingWithArgs with ($arg1 = hello and $arg2 = world).
    This is Test2::doSomethingWithArgs with ($arg1 = hello2 and $arg2 = world2).

    2. func_get_args、func_num_args和func_get_args: 

        这三个函数的共同特征是都很自定义函数参数相关,而且均只能在函数内使用,比较适用于可变参数的自定义函数。他们的函数原型和简要说明如下:
    int func_num_args (void) 获取当前函数的参数数量。
    array func_get_args (void) 以数组的形式返回当前函数的所有参数。
    mixed func_get_arg (int $arg_num) 返回当前函数指定位置的参数,其中0表示第一个参数。

    <?php
    function myTest() {
        $numOfArgs = func_num_args();
        $args = func_get_args();
        print "The number of args in myTest is ".$numOfArgs."
    ";
        for ($i = 0; $i < $numOfArgs; $i++) {
            print "The {$i}th arg is ".func_get_arg($i)."
    ";
        }
        print "
    -------------------------------------------
    ";
        foreach ($args as $key => $arg) {
            print "$arg
    ";
        }
    }
    
    myTest('hello','world','123456');

        运行结果如下:

    Stephens-Air:TestPhp$ php class_exist_test.php 
    The number of args in myTest is 3
    The 0th arg is hello
    The 1th arg is world
    The 2th arg is 123456
    
    -------------------------------------------
    hello
    world
    123456

    3. function_exists和register_shutdown_function:

        函数原型和简要说明如下:

    bool function_exists (string $function_name) 判断某个函数是否存在。
    void register_shutdown_function (callable $callback [, mixed $parameter [, mixed $... ]]) 在脚本结束之前或者是中途调用exit时调用改注册的函数。另外,如果注册多个函数,那么他们将会按照注册时的顺序被依次执行,如果其中某个回调函数内部调用了exit(),那么脚本将立刻退出,剩余的回调均不会被执行。

    <?php
    function shutdown($arg1,$arg2) {
        print '$arg1 = '.$arg1.', $arg2 = '.$arg2."
    ";
    }
    
    if (function_exists('shutdown')) {
        print "shutdown function exists now.
    ";
    }
    
    register_shutdown_function('shutdown','Hello','World');
    print "This test is executed.
    ";
    exit();
    print "This comments cannot be output.
    ";

        运行结果如下:

    Stephens-Air:TestPhp$ php call_user_func_test.php 
    shutdown function exists now.
    This test is executed.
    $arg1 = Hello, $arg2 = World
  • 相关阅读:
    [THREEJS]坐标高精度问题
    纹理的寻址方式
    [1009]JS语言精髓与编程实践笔记1
    万向锁
    (转)primitive restarting
    西藏游记
    平衡二叉树(AVL tree)
    初探redis事务
    redis发布与订阅
    初探redis分布式锁
  • 原文地址:https://www.cnblogs.com/orangeform/p/3501614.html
Copyright © 2011-2022 走看看