首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP call_user_func() 回呼函式完整指南:注意事項、類別方法呼叫、引用傳遞與陣列參數版

     編輯:PHP 相關知識

call_user_func() 與 call_user_func_array() 實現動態函式呼叫,支援函式名稱字串、匿名函式、類別靜態方法、物件方法,並完整支援引用傳遞。

基本語法

mixed call_user_func(callable $callback, mixed ...$args)

常見陷阱:語言結構不可作為回呼

下列關鍵字不能作為 $callback:array()、echo()、empty()、eval()、exit()、isset()、list()、print()、unset()。

實戰坑點:若類別內有名為 list 的方法,呼叫 call_user_func([$obj, 'list']) 會觸發 Parse error: syntax error, unexpected T_LIST,因解析器誤判為語言結構。解法:改用 call_user_func_array() 或重新命名方法。

呼叫類別方法:陣列語法

// 靜態方法
call_user_func(['MyClass', 'staticMethod'], 'arg1'); // 物件方法
$obj = new MyClass();
call_user_func([$obj, 'method'], 'arg1');

call_user_func_array() — 參數打包成陣列

mixed call_user_func_array(callable $callback, array $args)
function add($a, $b) { return $a + $b; }
echo call_user_func_array('add', [10, 20]); // 30

引用傳遞支援

function inc(&$n) { $n++; }
$val = 0;
call_user_func('inc', &$val); // $val = 1
call_user_func_array('inc', [&$val]); // $val = 2

效能提示

  • 動態呼叫比直接呼叫慢 (需解析 callable),熱路徑建議直接呼叫或用 Closure::bind() 快取。
  • PHP 7.1+ Closure::fromCallable() 可將 callable 轉為閉包,後續呼叫更快。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved