繁体   English   中英

从iside获取类名是另一个类的方法

[英]Getting a class name from iside a another classe's method

我想知道从类内部调用方法时是否有一种访问信息的方法。

例。

在这里,我有一个带有__classStatic()方法的类,可以生成任意方法。

class Caller
{
  public function __callStatic($func, $args){
       echo "method $func is being called from class ..."; 
  }
}

现在,无论何时在方法中调用ex: Caller::foo() ,都会说一个名为Reader的类,

class Reader{
    Caller::foo(); 
}

我想要`foo()输出。

从类Reader中调用方法foo

因此,问题在于获取从中调用方法的调用名称。

我在foo()内部尝试使用以下方法获取类名:

get_class()
get_parent_class()
get_called_class()

但是,没有人提供我想要的任何信息。

PHP中没有语言构造可实现此目的。 为此,您需要分析堆栈跟踪:

class Callee
{
    public static function __callStatic($func, $args){
        $trace = debug_backtrace();
        for($i = 1; $i < count($trace); $i++) {
            $x = $trace[$i];
            if($x['function'] === $func && is_a($x['class'], __CLASS__, true)) {
                continue;
            }
            $class = $x['class'];
            break;
        }
        return "method $func is being called from class $class";
    }
}

class Foo extends Callee
{
}

class Reader
{
  function doSomething(){
      echo Foo::foo();
  }
}

(new Reader)->doSomething();

输出:

method foo is being called from class Reader

但是,这非常不好。 您的应用程序逻辑不应依赖于此。 出于分析目的,您可以使用调试器。


给出的原始答案是因为您首先写的内容​​是您期望的:

从类Reader中调用方法foo

您需要使用get_called_class()

class Caller
{
  public static function __callStatic($func, $args){
       echo "method $func is being called from class " . get_called_class();
  }
}

还要注意, __callStatic()需要声明为static 顺便说一句,类名Caller听起来很奇怪。 我想你的意思是Callee

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM