PHP函数处理函数

call_user_func:把第一个参数作为回调函数调用。

call_user_func_array:调用回调函数,并把一个数组参数作为回调函数的参数。

<?php
namespace ns{
function foo($arg1,$arg2){
    echo "call function:".__FUNCTION__.",with arg1:$arg1,arg2:$arg2\n";
}
class A {
    function fooInA($arg1,$arg2){
        echo "call function:".__NAMESPACE__.'\\'.__FUNCTION__.",with arg1:$arg1,arg2:$arg2\n";
    }
}
}

namespace {
function foo($arg1,$arg2){
    echo "call function:".__FUNCTION__.",with arg1:$arg1,arg2:$arg2\n";
}
class A {
    function fooInA($arg1,$arg2){
        echo "call function:".__FUNCTION__.",with arg1:$arg1,arg2:$arg2\n";
    }
}
$params=array("var1","var2");
//调用函数
call_user_func("foo","var1","var2");
call_user_func(foo,"var1","var2");
call_user_func_array("foo",$params);
call_user_func_array(foo,$params);
//调用类中函数
$a=new A;
call_user_func(array('A',"fooInA"),"var1","var2");
call_user_func(array($a,"fooInA"),"var1","var2");
call_user_func_array(array('A',"fooInA"),$params);
call_user_func_array(array($a,"fooInA"),$params);
//调用命名空间中的函数
call_user_func(__NAMESPACE__.'\ns\foo',"var1","var2");
call_user_func(array(__NAMESPACE__.'\ns\A',"fooInA"),"var1","var2");
call_user_func(__NAMESPACE__.'\ns\A::fooInA',"var1","var2");
call_user_func_array(__NAMESPACE__.'\ns\foo',$params);
call_user_func_array(array(__NAMESPACE__.'\ns\A',"fooInA"),$params);
call_user_func_array(__NAMESPACE__.'\ns\A::fooInA',$params);
}
?>

func_get_arg:返回参数列表的某一项。参数的偏移量从0开始计算。

func_get_args:返回一个包含函数参数列表的数组。

func_num_args:返回传递给函数的参数个数。

<?php
function foo(){
    $num_args=func_num_args();
    echo "$num_args arguments passed,";
    if($num_args>0){
        $last_arg=func_get_arg($num_args-1);
        echo "last argument is $last_arg\n"; 
        echo "all arguments are ".join(",",func_get_args());
    }else{
        echo "no argument passed\n";
    }
    
}
foo('a','b','c');
foo();
?>

forward_static_call:用提供的参数调用静态方法,不能在类外调用此函数。

forward_static_call_array:调用静态方法,并把一个数组参数作为回调函数的参数。

<?php
class A{
    static function foo(){
        $num_args=func_num_args();
        echo "$num_args arguments passed,";
        if($num_args>0){
            $last_arg=func_get_arg($num_args-1);
            echo "last argument is $last_arg\n"; 
            echo "all arguments are ".join(",",func_get_args())."\n";
        }else{
            echo "no argument passed\n";
        }
        
    }
    
}

class B{
    function test(){
        forward_static_call(array('A','foo'),'a','b','c');
        forward_static_call_array(array('A','foo'),array('a','b','c'));
    }
}
$b=new B;
$b->test();
B::test();
?>

create_function:从传递的参数中创建一个匿名函数,并返回它的唯一名称。

function_exists:在已经定义的函数列表(包括系统自带的函数和用户自定义的函数)中查找指定的函数,如果存在则返回true,对于include_once、echo等语法结构,会返回false。

get_defined_functions:返回所有已定义的函数的数组。PHP7.0.15、PHP7.1.1增加一个可选的参数,表示是否去除返回数组中被禁用的函数,默认为false。返回的数组包含两部分,一部分是内置函数,另一部分是用户定义的函数,可通键internal来访问系统内置函数,通过键user来访问用户自定义函数。返回的数组中不包括匿名函数。

<?php
$func=create_function('$arg1,$arg2','return $arg1+$arg2;');
echo "$func\n";
echo $func(1,2)."\n";
var_dump(function_exists("chr"));
function foo(){
    echo "foo";
}
$funcs=get_defined_functions();
//var_dump($funcs);
var_dump($funcs["internal"]);
var_dump($funcs["user"]);
?>

register_shutdown_function:注册一个会在php中止时执行的函数,注册的回调函数会在脚本执行完成或exit函数被调用后执行。可以多次调用register_shutdown_function函数来注册多个函数,这些函数会按注册时的顺序依次被调用,如果被注册的函数内部调用了exit函数,则所有处理会被中止,并且注册的其他回调函数也不会被调用。

register_tick_function:注册每个时钟周期(ticks)要执行的函数。

unregister_tick_function:取消注册的每个时钟周期(ticks)要执行的函数。

<?php
declare(ticks=1);
 
function tick_handler(){
    echo __METHOD__." called\n";
}

register_tick_function('tick_handler');

$a = 1;
if ($a > 0) {
    $a += 2;
    print $a."\n";
}

?>
<?php
declare(ticks=1);
 
function tick_handler(){
    echo __METHOD__." called\n";
}
function tick_handler2(){
    echo __METHOD__." called\n";
}
register_tick_function('tick_handler');
register_tick_function('tick_handler2');
unregister_tick_function('tick_handler2');
$a = 1;
if ($a > 0) {
    $a += 2;
    print $a."\n";
}

?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值