2013-05-06 130 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

相关问题