Вопрос

Есть ли способ получить полученное имя класса из статического ключевого слова? То, что я действительно хочу сделать, это сделать.

Сделать отражение полученного класса
Проверьте, когда он реализует указанный класс или нет

У меня статический метод, который базовый класс говорит, что он назван Base::check()я хочу Base::check() проверит наличие реализации интерфейса. Метод Check () знает имя интерфейса. Так что мне не нужно рассказывать его от внешнего мира.

Но если нет способа получить DervedClassname из статического ключевого слова, мне нужно пройти имя класса в метод от внешнего мира. Который не является хорошим принципом кодирования.

Еще одна альтернатива, которую я могу сделать, это. Я могу сделать ::instance() Статический метод, который возвращает this И я могу сделать Get_Class от его возвращения. Но это также Tweeks мой принцип заявки.

Так что первый метод действительно возможно? Или мне нужно пойти на некоторую альтернативу такого рода? Или у вас есть какие-либо другие альтернативы?

Это было полезно?

Решение

Я не уверен, понимаю, что понимаю, что вы пытаетесь сделать, особенно то, что вы подразумеваете под «Получить полученное имя класса из статического ключевого слова«. Проверьте следующие функции, чтобы увидеть, что они сделают то, что вы хотите сделать:

  • class_implements - Верните интерфейсы, которые реализуются данным классом
  • class_parents - вернуть родительские классы данного класса
  • is_a - проверяет, является ли объект этого класса или имеет этот класс как один из его родителей
  • is_subclass_of - проверяет, имеет ли объект этот класс как один из его родителей
  • instanceof Тип оператора

Если вы ссылаетесь на Позднее статическое обязательство, посмотри на

  • get_called_class - название класса «Позднее статическое связывание»

Я полагаю, вы пытаетесь сделать что-то вроде этого:

class Base
{
    public static function check()
    {
        return in_array('IFoo', class_implements(get_called_class(), FALSE));
        // or
        $instanceClassName = get_called_class();
        return new $instanceClassName instanceof IFoo;
        // or
        $reflector = new ReflectionClass(get_called_class());
        return $reflector->implementsInterface('IFoo');           
    }
}
interface IFoo {};
class Foo extends Base implements IFoo {}

var_dump( Foo::check() );
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top