PHP:如何知道哪个类在Trait中调用逻辑?

时间:2018-12-18 09:52:03

标签: php php-7.2

在Laravel中,我有几个Artisan命令,它们执行不同的功能,但共享一些逻辑。为了不重复我自己,我将逻辑转移到了特征上(主要是handle()方法。但是,一切都进行得很顺利……

如果我有FooCommandBarCommand以及两个命令use BazTrait,则在BazTrait内:

trait BazTrait
{
    public function handle()
    {
        // how to get the name of the class (FooCommand or BarCommand)
        // that called this code right now?

        dd(classThatCalledThis) // expect to dump either FooCommand or BarCommand
    }
}

也许我缺少了什么?感谢您的提示。

  

vagrant @ homestead:〜/ Code / foo $ php -v PHP   7.2.9-1 + ubuntu18.04.1 + deb.sury.org + 1(cli)(建立:2018年8月19日07:16:54)(NTS)

2 个答案:

答案 0 :(得分:4)

根据magic constants page

  

请注意,自PHP 5.4起,@Override public void deleteByVisitorId(Long visitorId) { visitorImageRepository.delete(visitorId); } 也可用于特征。在特征方法中使用时,__CLASS__是用于特征的类的名称。

您可以使用__CLASS__

__CLASS__

但是最可靠的方法(在继承和所有此类情况下)是:

dd(__CLASS__);

小提琴是here,它向您显示dd(static::class); __CLASS__之间的区别。

答案 1 :(得分:0)

get_class返回所传递对象的类的名称。由于您处于对象的一种方法中,因此从特性继承而来,您可以使用它来访问当前对象。

$classThatCalledThis = get_class($this);

请参见http://php.net/manual/fr/function.get-class.php