PHP 7.2 — PHP: Как узнать, какой класс называется логикой внутри черты?

В 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)

0

Решение

В соответствии с страница магических констант

Обратите внимание, что начиная с PHP 5.4 __CLASS__ работает также в чертах. При использовании в методе черт, __CLASS__ Имя класса, в котором используется черта.

ты можешь использовать __CLASS__:

dd(__CLASS__);

Но самый надежный способ (в случае наследования и всего такого) это:

dd(static::class);

Скрипка это Вот, это показывает разницу между __CLASS__ а также static::class,

4

Другие решения

get_class возвращает имя класса переданного объекта. Поскольку вы находитесь в одном из методов объекта, унаследованных от черты, вы можете использовать это для доступа к текущему объекту.

$classThatCalledThis = get_class($this);

Увидеть http://php.net/manual/fr/function.get-class.php

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector