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

PHP 利用 Reflection 取得函數定義檔案與行號

     編輯:PHP 綜合知識

情境

除錯開源專案時,常需快速定位某個函數或類別方法的原始碼位置。若無 IDE 自動跳轉,可用 PHP 內建的 ReflectionFunction 與 ReflectionMethod 實作工具函式。

核心程式碼

<?php
function a() {}

class b {
    public function f() {}
}

function function_dump($funcname) {
    try {
        if (is_array($funcname)) {
            // 類別方法:array('類別名', '方法名') 或 array($object, '方法名')
            $func = new ReflectionMethod($funcname[0], $funcname[1]);
            $funcname = $funcname[1];
        } else {
            // 一般函數
            $func = new ReflectionFunction($funcname);
        }
    } catch (ReflectionException $e) {
        echo $e->getMessage();
        return;
    }

    $start = $func->getStartLine() - 1; // 起始行(含左大括號前一行)
    $end   = $func->getEndLine() - 1;   // 結束行
    $file  = $func->getFileName();

    echo "function $funcname defined by $file($start - $end)\n";
}

// 測試
function_dump('a');           // 一般函數
function_dump(array('b', 'f')); // 靜態類別方法
$b = new b();
function_dump(array($b, 'f'));  // 實例方法
?>

輸出範例

function a defined by /path/to/script.php(3 - 5)
function f defined by /path/to/script.php(8 - 10)
function f defined by /path/to/script.php(8 - 10)

關鍵方法說明

  • ReflectionFunction::__construct():建立函數反射物件。
  • ReflectionMethod::__construct():建立類別方法反射物件。
  • getStartLine() / getEndLine():取得定義起迄行號。
  • getFileName():取得檔案完整路徑。

應用場景

  • 自動產生 API 文件時標註原始碼位置。
  • 除錯工具顯示呼叫堆疊的精確位置。
  • 動態載入器檢查函數是否已定義。

只需幾行程式碼,即可在無 IDE 環境下快速定位函數定義,大幅提升除錯效率。

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