函數解釋:
call_user_func — 把第一個參數作爲回調函數調用 官方文檔
call_user_func_array — 調用回調函數,並把一個數組參數作爲回調函數的參數 官方文檔
代碼:
<?php
/**
* 自定義方法test
* @param $a 參數a
* @param $b 參數b
*/
function test($a, $b)
{
echo $a + $b;
}
//字符串傳參 //返回結果=3
echo call_user_func('test', 1, 2);
//數組式傳參 //返回結果=3
echo call_user_func_array('test', [1, 2]);
/**
* 調用匿名函數
*/
//返回結果=3
echo call_user_func(function ($a, $b) {
echo $a + $b;
}, 1, 2);
//返回結果=3
echo call_user_func_array(function ($a, $b) {
echo $a + $b;
}, [1, 2]);
/**
* 調用系統函數等同於 echo strtoupper('abc');
*/
echo call_user_func('strtoupper', 'abc'); // ABC
echo call_user_func_array('strtoupper', ['abc']); // ABC
/**
* 聲明一個類Test
* Class Test
*/
class Test
{
/**
* 靜態方法demo
* @param $a
* @param $b
*/
static public function demo($a, $b)
{
echo $a + $b;
}
/**
* 動態方法show
* @param $a
* @param $b
*/
public function show($a, $b)
{
echo $a + $b;
}
}
// 調用類中的靜態方法
// 類名方法名以數據形式
echo call_user_func(['Test', 'demo'], 1, 2); // 3
echo call_user_func_array(['Test', 'demo'], [1, 2]); // 3
// 類名方法名以字符串形式
echo call_user_func('Test::demo', 1, 2); // 3
echo call_user_func_array('Test::demo', [1, 2]); // 3
// 調用類中的動態方法,對象和方法必須通過數組形式傳遞
echo call_user_func([new Test, 'show'], 1, 2); // 3
echo call_user_func_array([new Test, 'show'], [1, 2]); // 3
/**
* 調用redis的方法批量寫入有序集合
* 等同於$redis->zAdd('key_name1',100,1,100,2,100,3,100,4,100,5);
*/
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$time_array = array('key_name1',100,1,100,2,100,3,100,4,100,5);
$results = call_user_func_array(array($redis, 'zAdd'), $time_array); //5