在 PHP 開發中,有時我們需要取得目前方法的信息,例如取得目前方法的名稱、參數列表、傳回值等等。本篇文章將介紹一些方法來獲取目前方法的資訊。
PHP 內建了一些變數來取得目前方法的信息,包括__FUNCTION__
、__METHOD__
、 __CLASS__
、__TRAIT__
等。其中,__FUNCTION__
可以取得目前函數的名稱,__METHOD__
可以取得目前方法(類別中的函數)的名稱,__CLASS__
可以取得目前類別的名稱, __TRAIT__
可以取得目前trait 的名稱。
舉例:
class MyClass { public function myMethod() { echo __FUNCTION__ . "\n"; echo __METHOD__ . "\n"; echo __CLASS__ . "\n"; echo __TRAIT__ . "\n"; } } $myInstance = new MyClass(); $myInstance->myMethod();
輸出結果:
myMethod MyClass::myMethod MyClass
上述程式碼中,__FUNCTION__
輸出了目前函數的名稱myMethod
,__METHOD__
輸出了目前方法的名稱MyClass::myMethod
,__CLASS__
輸出了目前類別的名稱MyClass
, __TRAIT__
輸出了目前trait 的名稱。要注意的是,__METHOD__
輸出的是完整的方法名,包含了類別名稱和方法名稱。
ReflectionClass 和 ReflectionMethod 是 PHP 內建的反射類,可以用來取得類別和方法的資訊。使用ReflectionMethod 的getClassName() 方法可以取得目前方法所在類別的名稱,getName() 方法可以取得目前方法的名稱,getParameters() 方法可以取得目前方法的參數列表,getReturnType() 方法可以取得目前方法的回傳值類型。
舉個例子:
class MyClass { public function myMethod($param1, $param2) { // do something } } $myInstance = new MyClass(); $reflectMethod = new ReflectionMethod($myInstance, 'myMethod'); echo $reflectMethod->getClassName() . "\n"; // 输出 MyClass echo $reflectMethod->getName() . "\n"; // 输出 myMethod $params = $reflectMethod->getParameters(); foreach ($params as $param) { echo $param->getName() . "\n"; // 输出 param1 和 param2 }
在上述程式碼中,透過 ReflectionMethod 類別取得了 MyClass 類別中的 myMethod 方法,並分別輸出了類別名稱、方法名稱和參數名稱。
debug_backtrace 函數可以取得目前呼叫堆疊的信息,可以用來取得目前方法的資訊。透過 debug_backtrace 函數得到的資訊是一個數組,數組包含了呼叫堆疊中的所有函數和方法的信息,所以需要遍歷數組找到當前方法的資訊。
舉個例子:
class MyClass { public function myMethod() { $trace = debug_backtrace(); foreach ($trace as $traceItem) { if ($traceItem['function'] == 'myMethod') { echo $traceItem['class'] . "\n"; // 输出 MyClass echo $traceItem['function'] . "\n"; // 输出 myMethod break; } } } } $myInstance = new MyClass(); $myInstance->myMethod();
上述程式碼中,透過 debug_backtrace 函數取得了呼叫堆疊的信息,然後遍歷數組找到了 myMethod 方法的信息,並分別輸出了類別名稱和方法名稱。
總結
本文介紹了三種取得目前方法資訊的方法,分別是使用內建變數、使用 ReflectionClass 和 ReflectionMethod,以及使用 debug_backtrace 函數。其中,使用內建變數最簡單,但不能取得特定的參數列表和傳回值;使用ReflectionClass 和ReflectionMethod 需要實例化ReflectionClass 或ReflectionMethod 對象,較為繁瑣;使用debug_backtrace 函數雖然可以取得所有呼叫堆疊的信息,但需要遍歷數組找到目前方法的訊息,較為耗時。在實際的開發中,可以根據需求選擇合適的方法來獲取當前方法資訊。
以上是php 呼叫目前的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!