php中call_user_func 與 call_user_func_array的使用詳解

函數解釋:

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

 

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