php call_user_func(),call_user_func_array()示例和區別

<?php

//call_user_func()  返回值:返回回調函數的返回值.

//自定義方法,執行
function sum($a,$b){
    $c = $a+$b;
    echo $a;
    echo $b;
    echo $c;
}
call_user_func('sum','10','20');//102030
//也可以直接把回調方法寫入調用   func_get_args()  獲取參數的數組
call_user_func(function (){ $para = func_get_args(); foreach ($para as $v){ echo $v;} },10,20,13,30);//10201330

//類的使用
class test{
    function __construct()
    {
        echo 'construct';
    }

    public static function sum($a,$b){
        $c = $a+$b;
        echo $a;
        echo $b;
        echo $c;
    }

    function __destruct()
    {
        echo 'destruct';
    }
}
//其中類的方法沒有static修飾會報錯:Strict Standards:  非靜態方法的錯誤
call_user_func(array('test','sum'),'30','40');//304070
call_user_func('test::sum','30','40');//304070


//call_user_func_array()  返回回調函數的結果。如果出錯的話就返回FALSE

//實現相似,只是換了一種方式傳遞了參數,而自己感覺 call_user_func_array() 的寫入規則更加清楚
//方法
call_user_func_array('sum', array("111", "222"));//111222333
//也可以直接把回調方法寫入調用
call_user_func_array(function (){ $para = func_get_args(); foreach ($para as $v){ echo $v;} },array(10,20,30,40));//10203040
//類
call_user_func_array(array('test','sum'), array("111", "222"));//111222333
call_user_func_array('test::sum', array("111", "222"));//111222333


/*
call_user_func(),call_user_func_array()使用類的方法 和 new 對象後調用方法 區別
*/

//區別:該使用類的方法和直接new調用的區別,就是有沒有觸發構造和析構方法
//該調用了test類中的方法,但是沒有調用構造方法,而new對象就會觸發構造方法
$a = new test;
$a->sum(1,2);//construct123destruct




 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章