php – call_user_func() 報錯說要使用靜態的解決方法

如果直接使用如 call_user_func(array(‘User’, ‘name’), “李小姐”); 這種方法,會出現錯誤提示如 Strict Standards: call_user_func() expects parameter 1 to be a valid callback, non-static method…。這代表,呼叫的方法沒有指定 static (靜態)。

解決方法就是改 function 為 static,不然就是改成如 call_user_func(array(new User’, ‘name’), “李小姐”); 。下面舉例說明

<?
class User 
{
    public function name($string)
    {
        echo $string;
    }

    public function age($age)
    {
        echo $age;
    }

    public function tel($code, $tel)
    {
        echo "({$code}){$tel}";
    }

    static public function address($address)
    {
        echo $address;
    }

}

call_user_func(array('User', 'name'), "李小姐");
// 報錯 Strict Standards: call_user_func() expects parameter 1 to be a valid callback, non-static method User::name() should not be called statically in C:\xampp\htdocs\www\CI_jsn\test.php on line 20

call_user_func(array(new User, 'age'), "18");
// 實體化為物件以後,輸出 18

call_user_func(array(new User, 'tel'), "07", "336-1111");
// 添加多筆參數,輸出 (07)336-1111

call_user_func(array('User', 'address'), "高雄市");
// 指定為靜態方法,才可正常出 高雄市

 

參考PHP官方解釋

 

發表迴響