В 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 @ hometead: ~ / Code / foo $ php -v PHP
7.2.9-1 + ubuntu18.04.1 + deb.sury.org + 1 (cli) (сборка: 19 августа 2018 г., 07:16:54) (NTS)
В соответствии с страница магических констант
Обратите внимание, что начиная с PHP 5.4
__CLASS__
работает также в чертах. При использовании в методе черт,__CLASS__
Имя класса, в котором используется черта.
ты можешь использовать __CLASS__
:
dd(__CLASS__);
Но самый надежный способ (в случае наследования и всего такого) это:
dd(static::class);
Скрипка это Вот, это показывает разницу между __CLASS__
а также static::class
,
get_class возвращает имя класса переданного объекта. Поскольку вы находитесь в одном из методов объекта, унаследованных от черты, вы можете использовать это для доступа к текущему объекту.
$classThatCalledThis = get_class($this);