get_called_class () $ этот объект - PullRequest
0 голосов
/ 24 июня 2018

Как получить объект $this того класса, откуда была вызвана текущая функция?

class a extends zebra {
  function xyz() {
     ...
     b::somestaticmethod();
  }
}

class b {
  public static function somestaticmethod() {
    $callerObj = get_called_class();
  }
}

Функция get_called_class() извлекает имя вызывающего класса в строковом формате. То, что я ищу, это то, есть ли способ получить объект ($this) из контекста вызывающего класса, точно так же, как это произошло бы, если бы $this был передан в качестве аргумента, как показано ниже.

b::somestaticmethod($this);

Почему?

Я планирую реализовать полиморфное поведение в методе somestaticmethod(), который будет проверять вызывающий класс и на основе ancestor этого класса будет вести логику дальше.

1 Ответ

0 голосов
/ 24 июня 2018

Отражение, похоже, работает со свойствами наследования и статического класса

<?php

class a {
  public static function x() {
    $callerObj = get_called_class();
    return new ReflectionClass($callerObj); 
  }
}

class b extends a {
    public static $y = [0, 1, 2];

    public static function z() {
        return parent::x()->getProperty('y')->getValue();
    }
}

print_r(b::z());
array_push(b::$y, 3);
print_r(b::z());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...