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