PHP: возможно ли получить имя класса, используя черту из статического метода черты? - PullRequest
0 голосов
/ 18 мая 2018

Может ли имя класса, использующего черту, быть определено из статического метода, принадлежащего этой черте?

Например:

trait SomeAbility {
    public static function theClass(){
        return <name of class using the trait>;
    }
}

class SomeThing {
    use SomeAbility;
    ...
}

Получить имя класса:

$class_name = SomeThing::theClass();

Моя догадка, наверное, нет.Я не смог найти ничего, что подсказывало бы обратное.

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Да, используя get_called_class ()

<?php
trait SomeAbility {
    public static function theClass(){
        return get_called_class();
    }
}

class SomeThing {
    use SomeAbility;
}
// Prints "SomeThing"
echo SomeThing::theClass();
0 голосов
/ 18 мая 2018

Вы можете вызвать get_class() без параметра, чтобы получить имя текущего класса ...

trait SomeAbility {
    public static function theClass(){
        return get_class();
    }
}

class SomeThing {
    use SomeAbility;
}

echo SomeThing::theClass().PHP_EOL;
0 голосов
/ 18 мая 2018

Использование Позднее статическое связывание с static:

trait SomeAbility {
    public static function theClass(){
        return static::class;
    }
}

class SomeThing {
    use SomeAbility;
}

class SomeOtherThing {
    use SomeAbility;
}

var_dump(
    SomeThing::theClass(),
    SomeOtherThing::theClass()
);

// string(9) "SomeThing"
// string(14) "SomeOtherThing"

https://3v4l.org/mfKYM

...