2013-05-06 119 views
0

我對OOP相當陌生,我試圖獲取當前正在執行的類和方法的名稱。例如:獲取當前正在執行的方法

<?php 

class ParentExample 
{ 
    function __construct() 
    { 
     echo get_class($this) . '<br />'; 
     echo __METHOD__; 
     exit; 
    } 
} 

class ChildExample extends ParentExample 
{ 
    public static function test() 
    { 
     echo 'hello'; 
    } 
} 

call_user_func_array([new ChildExample, test]); 

這是我想要的結果:

ChildExample 
ChildExample::test 

這是結果我得到:

ChildExample 
ParentExample::__construct 

我看了debug_backtrace(),但我不明白如何解讀結果或者甚至是我所需要的。有沒有更簡單的方法來實現我所追求的目標?

編輯:基於答案,我認爲我的問題不清楚。我想讓ParentExample構造函數告訴我被調用方法的名字。這可能嗎?

回答

1

我想讓ParentExample構造函數告訴我被調用方法的名稱。這可能嗎?

沒有,這是不可能的。構造函數在執行時構造的對象並且只有這樣,這意味着它在之前執行,您可以對該對象進行任何方法調用。


echo __METHOD__;是在__construct方法內。由於__METHOD__總是有它在法的價值,它不能打印`

__construct被調用時,你創建的對象。您可以使用new運算符創建一個對象。這是不是連接到靜態test方法。

你將不得不把echo __METHOD__test方法要做到這一點;)

你應該使用字符串指定方法的名稱:

call_user_func_array([new ChildExample, "test"]); 
// Since you're not passing any arguments, this will do: 
call_user_func_array([new ChildExample, "test"]); 
+0

我已更新我的問題。是否有可能從父構造函數中獲取被調用的方法? – 2013-05-06 21:48:55

+0

@mistermartin我已經更新了答案。不,它不起作用。 – phant0m 2013-05-06 21:54:25

0

試試這個:

class ParentExample 
{ 
    function __construct() 
    { 
     echo get_class($this) . '<br />'; 
    } 
} 

class ChildExample extends ParentExample 
{ 
    public static function test() 
    { 
     echo __METHOD__; 
    } 
} 

call_user_func([new ChildExample, 'test']); 

請注意,我已經刪除父構造函數中的exit調用,並從chi回顯__METHOD__ ld類。如果你沒有腳本將會在ParentExample被實例化後立即結束。

此外,如果您不使用參數調用該方法,則應該使用call_user_func()而不是call_user_func_array()

+0

我已更新我的問題。是否有可能從父構造函數中獲取被調用的方法? – 2013-05-06 21:50:09

相關問題