Получите строку кода и файл, это выполняет текущую функцию в PHP?

Это должно ответить на тот вопрос, и затем некоторых.

вторая строка, if (obj.GetType() == typeof(ClassA)) {}, быстрее для тех, которые не хотят читать статью.

57
задан Charles 23 December 2012 в 21:39
поделиться

2 ответа

Вы можете использовать debug_backtrace ().

http://us3.php.net/manual/en/function.debug-backtrace.php

Итак, в вашем журнале функция , вы сможете получить имя файла и номер строки, из которой была вызвана функция журнала.

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

Вот быстрый пример:

function log($msg)
{
  $bt = debug_backtrace();
  $caller = array_shift($bt);

  // echo $caller['file'];
  // echo $caller['line'];

  // do your logging stuff here.    
}
91
ответ дан 24 November 2019 в 19:30
поделиться

debug_backtrace () можно использовать для обратной трассировки через стек вызовов. Однако это может быть медленным, поэтому будьте осторожны, если вы много ведете журнал.

Если вы используете PHP 5.3, вы можете воспользоваться преимуществом позднего статического связывания и иметь базу class метода log () , и ваши дочерние классы могут вызывать его, но по-прежнему поддерживать статические ссылки на __ FILE __ и __ LINE __ .

Последним вариантом будет просто передайте __ FILE __ и __ LINE __ в качестве параметров при вызове функции log () .

27
ответ дан 24 November 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: