在Laravel中,我有几个Artisan命令,它们执行不同的功能,但共享一些逻辑。为了不重复我自己,我将逻辑转移到了特征上(主要是handle()
方法。但是,一切都进行得很顺利……
如果我有FooCommand
和BarCommand
以及两个命令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)
答案 0 :(得分:4)
请注意,自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);