• function_exists — 如果给定的函数已经被定义就返回 TRUE

    在已经定义的函数列表(包括系统自带的函数和用户自定义的函数)中查找 function_name。

  • func_get_args — 返回一个包含函数参数列表的数组

获取函数参数列表的数组。

该函数可以配合 func_get_arg() 和 func_num_args() 一起使用,从而使得用户自定义函数可以接受自定义个数的参数列表。

我们不建议经常使用这个函数,因为不建议给已定义无参函数传递参数的行为。


```php
function foo()
{
    $numargs = func_num_args();
    echo "Number of arguments: $numargs<br />\n";
    if ($numargs >= 2) {
        echo "Second argument is: " . func_get_arg(1) . "<br />\n";
    }
    $arg_list = func_get_args();
    for ($i = 0; $i < $numargs; $i++) {
        echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
    }
}

foo(1, 2, 3);//虽然foo定义时是无参的,但这里还是不会报错的
```

建议传递一个数组或对象,可以用于灵活扩展参数。
  • func_num_args — Returns the number of arguments passed to the function

  • func_get_arg — 返回参数列表的某一项

  • call_user_func — 把第一个参数作为回调函数调用

    call_user_func( callable $callback[, mixed $parameter[, mixed $...]] ) : mixed
    

    第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

    function userTest($type)
    {
        echo $type."\n";
    }
    
    $func = "userTest";
    call_user_func($func, "string");
    call_user_func($func, "boolean");
    call_user_func_array($func,["array"]);
    
    
    class myclass {
        public function sayHello($name)
        {
            echo "Hello $name!\n";
        }
    }
    
    $classname = "myclass";
    
    call_user_func(array($classname, 'sayHello'),"jm");//如果是类或方法是static时,可以采用这个方式
    call_user_func($classname .'::sayHello',"jm"); // As of 5.2.3,但我们不建议
    
    $myobject = new myclass();
    call_user_func(array($myobject, 'sayHello'),"jm");//如果不是static的类与方法,我们建议采用这个方式
    call_user_func_array([$myobject,"sayHello"], ['jm']);
    
  • call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数

    把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。

  • create_function — 创建一个匿名函数

    $newfunc = create_function('$a,$b', 'return "$a+ $b = " . ($a + $b);');
    echo $newfunc(1,2);//1+ 2 = 3
    
  • forward_static_call_array — Call a static method and pass the arguments as array

  • forward_static_call — Call a static method

  • get_defined_functions — 返回所有已定义函数的数组

  • register_shutdown_function — 注册一个会在php中止时执行的函数

    注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。

    可以多次调用 register_shutdown_function() ,这些被注册的回调会按照他们注册时的顺序被依次调用。如果你在注册的方法内部调用 exit(), 那么所有处理会被中止,并且其他注册的中止回调也不会再被调用。

    function willExit($params){
        print_r($params);
        echo "i am exit now.";
    
    }
    register_shutdown_function('willExit',["app"]);//同样支持函数、对象方法、参数
    

    注意:如果进程被信号SIGTERM或SIGKILL杀死,那么中止函数将不会被调用。

  • register_tick_function — 注册一个在每一次时钟周期触发的执行的函数

    Tick(时钟周期)是一个在 declare 代码段中解释器每执行 N 条可计时的低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的。

    不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。

    declare(ticks=1);
    
    // A function called on each tick event
    function tick_handler()
    {
        echo "tick_handler() called\n";
    }
    
    register_tick_function('tick_handler');
    
    $a = 1;
    
    if ($a > 0) {
        $a += 2;
        print_r($a."\n);
    }
    
    tick_handler() called
    tick_handler() called
    tick_handler() called
    3
    tick_handler() called
    
  • unregister_tick_function — 取消注册时钟周期触发函数