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

PHP Callback 函數完整指南:三種呼叫形式與實務應用

     編輯:PHP 綜合知識

系統說明 PHP 中 Callback 函數的三種傳遞形式:一般函數名稱字串、靜態類方法陣列、物件實例方法陣列。並列出不可作為 callback 的語言結構清單,附完整可執行範例。

Callback 三種型態

型態傳遞語法範例
一般函數函數名稱字串'my_callback_function'
靜態類方法['ClassName', 'methodName']['MyClass', 'myCallbackMethod']
物件方法[$object, 'methodName'][$obj, 'myCallbackMethod']

不可作為 Callback 的語言結構

array(), echo(), empty(), eval(), exit(), isset(), list(), print(), unset()

完整可執行範例

<?php
// 1. 一般函數
function my_callback_function() {
    echo "hello world!\n";
}

// 2. 類別與方法
class MyClass {
    public static function myCallbackMethod() {
        echo "Hello World from static!\n";
    }
    public function myInstanceMethod() {
        echo "Hello World from instance!\n";
    }
}

// Type 1: 一般函數
call_user_func('my_callback_function');

// Type 2: 靜態類方法
call_user_func(['MyClass', 'myCallbackMethod']);

// Type 3: 物件方法
$obj = new MyClass();
call_user_func([$obj, 'myInstanceMethod']);

// 進階:搭配 array_map / usort
$numbers = [3, 1, 4, 1, 5];
usort($numbers, function($a, $b) { return $a - $b; });
print_r($numbers); // 排序後
?>

常見內建函數支援 Callback

  • call_user_func() / call_user_func_array()
  • array_map(), array_filter(), array_reduce(), array_walk()
  • usort(), uasort(), uksort()
  • preg_replace_callback()
  • spl_autoload_register()

PHP 5.4+ 可呼叫類型檢測

<?php
$callable = ['MyClass', 'myCallbackMethod'];
if (is_callable($callable)) {
    call_user_func($callable);
}

// 取得呼叫資訊
$info = (new ReflectionFunction($callable))->getFileName();
?>

實務應用場景

  1. 策略模式:執行時動態決定演算法(如排序、過濾、格式化)。
  2. 事件/鉤子系統:註冊回調,特定時機觸發(如 Laravel 事件、WordPress Hook)。
  3. 非同步/延遲執行:佇列任務、排程器回調。
  4. 依賴注入:注入具體實作行為。

最佳實務

  • 優先使用 Closure(匿名函數)取代字串函數名,支援 IDE 導航與靜態分析。
  • 型別提示使用 callable(PHP 7.1+)或 Closure。
  • 避免在效能敏感路徑過度使用 call_user_func,直接呼叫閉包較快。

掌握 Callback 三種形式與適用場景,能靈活設計可擴充、解耦的 PHP 架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved