2016-08-21 3 views
0

у нас есть один классдозвонились имя класса в другом классе

class A 
{ 
    // I am using class B here 
    public function whatever() 
    { 
     $class_b = new B; 
     $class_b->show_caller(); 
    } 
} 

и другие

class B 
{ 
    public function show_caller() 
    { 
     // show me the caller class (should output "A") 
    } 

} 

Мне нужно получить имя класса вызывающего абонента. P.S. Наследование не вариант!

+1

Зачем вам звонящий? Похоже на недостаток дизайна. – tkausl

+0

Возможный дубликат [Print PHP Call Stack] (http://stackoverflow.com/questions/1423157/print-php-call-stack) –

+0

Ну, я знаю, что архитектура плохая, но проект очень большой, и я не знаю, t время для реорганизации всего этого. Я просто не могу использовать Наследование. – remtsoy

ответ

1

Pass класс A в качестве параметра B::show_caller() и вывода его имя класса с помощью get_class():

class A 
{ 
    // I am using class B here 
    public function whatever() 
    { 
     $class_b = new B; 
     $class_b->show_caller($this); 
    } 
} 

class B 
{ 
    public function show_caller($class) 
    { 
     echo get_class($class); 
    } 

} 
+0

Ну, это должно быть динамично ... – remtsoy

+0

Это ничего не значит. * Как * он должен быть динамичным? Как бы вы не решили работать для вас? –

+0

Я думаю, что он имеет в виду, что $ class_b-> show_caller ($ class_b); вернет B, а не A. Но действительно интересно найти решение без параметров – jaro1989

0

Мы не можем предоставить знания о где ваш метод выполняется в классе метода без параметров. Позднее статическое связывание будет работать только с наследованием, так что это не ваш случай. Единственный подход, который я могу вам дать, - использовать возможности IDE для поиска использования метода в вашем проекте (ctrl+mouse1 в PhpStorm). Если вы не используете IDE - пришло время для начала.

Смежные вопросы