PHP: вызов имени класса с использованием унаследованной функции из расширенного класса - PullRequest
0 голосов
/ 06 сентября 2011

Если эффект, у меня это в процессе:

    Class Foo {
      $bar = new Bar();
      protected function Spoon() {
         get_class($this);
      }
    }

    Class Bar extended Foo {
       $this::Spoon(); //Should show "Bar", but instead shows "Foo"
    }

Я хочу найти "Бар" из Spoon (), но я всегда получаю родительский класс. Я немного потерян здесь. Как я могу заставить этот код работать должным образом?

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

Попробуйте:

echo parent::Spoon();

Это заставит ссылаться на него в контексте родительского класса (Foo). Вы также можете использовать get_parent_class() внутри Bar:

echo get_parent_class('Bar');
1 голос
/ 06 сентября 2011

вы можете использовать позднюю статическую привязку (php> = 5.3), например в этом ответе .

protected function Spoon() {
    get_called_class($this);
}

или вызовите функцию с помощью

$this->Spoon();
1 голос
/ 06 сентября 2011

get_class() возвращает 'Foo', поскольку, поскольку метод Spoon() наследуется, он выполняется в классе Foo.Использование константы __CLASS__ вместо get_class() должно работать так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...