PHP получает название класса - PullRequest
0 голосов
/ 03 марта 2010

Есть ли способ для класса, вызываемого внутри другого, узнать имя внешнего класса?

Пример:

class A{
  // need to get the name of B
  // some stuff
}

class B{
  $var = new A;
}

get_parent_class () q не выполняет работу, поскольку B не является дочерним для A.

Есть предложения?

Редактировать: Извините всех, я должен был изменить вопрос. Я хотел спросить, может ли класс А знать имя класса, в котором он вызывается. Снова извините за идиотский первый вопрос.

Ответы [ 4 ]

6 голосов
/ 03 марта 2010

Нет, это невозможно.

Ну, почти. Вы можете взломать свой путь к вызывающему классу из debug_backtrace или apd_callstack , но это довольно неэффективно и медленно. Xdebug имеет ряд функций, которые также могут помочь вам достичь этого, но все это не то, что вам нужно в рабочем коде.

Самый простой способ - передать экземпляр B в A, например,

class A {
    protected $callerInstance;
    protected $callerClassName
    public function __construct($caller) {
        $this->callerInstance = $caller;
        $this->callerClassName = get_class($caller);
    }
}
2 голосов
/ 03 марта 2010

Вы хотите get_class ()

get_class - Возвращает имя класса объекта

1012 * редактировать * Как сказал Гордон, это невозможно. Возможно, вам удастся проанализировать стек вызовов, чтобы увидеть, в каком классе он находится, но я бы этого не сделал.

1 голос
/ 03 марта 2010

Это возможно, если вы передадите имя класса B конструктору класса A. Это потребовало бы модификации в классе A (и всех классах, для которых это нужно). Дерзкий, но делает то, что тебе нужно.

class A{
  function __construct($caller){
     echo $caller; // will echo B, C and D respectively
  }
}

class B{
   $var = new A(get_class($this));
}

class C{
   $var = new A(get_class($this));
}

class D{
   $var = new A(get_class($this));
}
0 голосов
/ 03 марта 2010
get_class($var)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...