PHP: Как узнать, какой класс называется логикой внутри Trait? - PullRequest
0 голосов
/ 18 декабря 2018

В 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) (сборка: 19 августа 2018 г., 07:16:54) (NTS)

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Согласно странице магических констант

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

, который вы можете использовать __CLASS__:

dd(__CLASS__);

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

dd(static::class);

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

0 голосов
/ 18 декабря 2018

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

$classThatCalledThis = get_class($this);

См. http://php.net/manual/fr/function.get-class.php

...