Как получить имя вызываемой функции в __construct без debug_backtrace - PullRequest
0 голосов
/ 22 июля 2010

Как получить имя метода вызывающего в конструкторе класса, get_called_class () дает мне имя расширенного класса, для которого был создан экземпляр, но как я могу получить имя метода, который был вызван в этом классе?Мне это нужно для рабочего состояния, поэтому debug_backtrace () не является хорошим решением.

Ответы [ 4 ]

1 голос
/ 22 июля 2010

Зачем тебе это? Если у вас есть любое соображение для других кодировщиков проекта и стандартов, найдите решение, которое не требует, чтобы конструктор знал о том, как он вызывался. Если все другие решения терпят неудачу, определите статический метод фабрики и сделайте конструктор частным для большего контроля над реализацией.

0 голосов
/ 22 июля 2010

Не существует автоматического способа сделать это, кроме медленного / уродливого debug_backtrace или передачи имени в качестве аргумента конструктору .... но вам не следует встраивать такие зависимости в ваши классы.

0 голосов
/ 22 июля 2010

Похоже, нет способа получить его без debug_backtrace(). Тем не менее, вы можете создать нашу функцию для этого. Пример из manual :

function get_caller_method() 
{ 
    $traces = debug_backtrace(); 

    if (isset($traces[2])) 
    { 
        return $traces[2]['function']; 
    } 

    return null; 
} 
0 голосов
/ 22 июля 2010

Если вы не хотите использовать функцию debug_backtrace (), вы также можете выбросить и перехватить исключение, чтобы получить обратную трассировку.

Но это также ужасно ... В любом случае:

try
{
    throw new Exception();
}
catch( Exception $e )
{
    print_r( $e->getTrace() );
}

Я не знаю, зачем вам звонящий.Может быть, вы можете исправить это, используя другую логику.Это должно быть лучше, чем получить обратную трассировку ...

РЕДАКТИРОВАТЬ

Исключение не нужно создавать.Извините за эту часть.Таким образом, вы можете просто использовать:

$e = new Exception();
print_r( $e->getTrace() );

Но опять же, вам не нужно использовать это!

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