2014-01-13 43 views
0

我有一些類:獲取命名功能在PHP

class A 
{ 
    private $_method; 
    public function __construct() 
    { 
     $this->_method = new B(); 
    } 
    public function demo() 
    { 
    $this->_method->getNameFnc(); 
    } 
} 

class B 
{ 
    public function getNameFnc() 
    { 
    echo __METHOD__; 
    } 
} 

我試圖讓class B類的函數名,但我想要的功能getNameFnc返回「演示」。如何獲取class B的功能getNameFnc中的名稱「演示」?

+0

所以,你想知道哪個函數調用*'getNameFnc()'? –

+0

[在PHP中如何獲取調用函數/方法的名稱?](http://stackoverflow.com/questions/2110732/how-to-get-name-of-calling-function-method-in-php ) – Drumbeg

+0

我想在函數中調用名字函數演示getNameFnc –

回答

1

好吧,如果你真的想這樣做而沒有經過參數*,你可以使用debug_backtrace()

→ Ideone.com

public function getNameFnc() 
{ 
    $backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 2); 
    echo $backtrace[1]['function']; 
} 

*這將是推薦的方法,雖然人們不應該需要知道該功能以前被稱爲。如果你的應用程序依賴於這個事實,那麼你就有一個主要的設計缺陷。

+2

+1主要設計缺陷。 debug_backtrace只能用於調試目的,而不能用於應用程序工作流程。 – ILikeTacos

1

您將需要使用debug_backtrace來獲取該信息。

我沒有測試過下面的代碼,但我認爲這應該給你的信息,你想:

$callers = debug_backtrace(); 
echo $callers[1]['function']; 
+1

它必須是'$ callers [0]',並且還應該使用第二個參數限制回溯。 – ComFreek

+0

對不起,我最近的評論中有錯誤的信息。當然它是'1'而不是'0'。即使我的演示鏈接是越野車,我不能相信沒有人糾正我) – ComFreek

+0

哈哈沒問題,我沒有時間測試你的代碼或我的,所以我只是假設你是正確的。謝謝你讓我知道! – ILikeTacos

0

爲什麼通不過?

class A 
{ 
    private $_method; 
    public function __construct() 
    { 
     $this->_method = new B(); 
    } 
    public function demo() 
    { 
    $this->_method->getNameFnc(__METHOD__); 
    } 
} 

class B 
{ 
    public function getNameFnc($method) 
    { 
    echo $method; 
    } 
} 

或者使用__FUNCTION__如果你不想要類名。

+1

你基本上只是爲'echo'函數創建了一個包裝器。它有效,但是完全沒有意義。 – Drumbeg