【问题标题】:Get called class name in Another class在另一个类中获取被调用的类名
【发布时间】:2016-12-28 04:28:19
【问题描述】:

我们只有一门课

class A
{
    // I am using class B here
   public function whatever()
   {
      $class_b = new B;
      $class_b->show_caller();
   }
}

其他

class B
{
    public function show_caller()
    {
        // show me the caller class (should output "A")
    }

}

我需要获取调用者类名。 附:继承不是一种选择!

【问题讨论】:

  • 为什么需要调用者?听起来像是设计缺陷。
  • Print PHP Call Stack的可能重复
  • 嗯,我知道架构很糟糕,但是项目很大,我没有时间重构所有这些。我就是不能使用继承。

标签: php


【解决方案1】:

我们无法在没有参数的情况下向方法的类提供有关您的方法在何处执行的知识。后期静态绑定仅适用于继承,因此不是您的情况。我可以给您的唯一方法是使用您的 IDE 功能来查找项目中的方法使用情况(PhpStorm 中的ctrl+mouse1)。如果您没有使用任何 IDE - 是时候开始了。

【讨论】:

    【解决方案2】:

    A 类作为参数传递给B::show_caller(),并使用get_class() 输出它的类名:

    class A
    {
        // I am using class B here
       public function whatever()
       {
          $class_b = new B;
          $class_b->show_caller($this);
       }
    }
    
    class B
    {
        public function show_caller($class)
        {
            echo get_class($class);
        }
    
    }
    

    【讨论】:

    • 这并不意味着什么。 如何它应该是动态的?解决方案怎么会不适合您?
    • 我认为他的意思是 $class_b->show_caller($class_b);将返回 B,而不是 A。但是找到没有参数的解决方案真的很有趣
    猜你喜欢
    • 2013-06-08
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2014-02-14
    • 2020-01-26
    • 1970-01-01
    相关资源
    最近更新 更多