Получить номер строки кода, активной в данный момент

Ямерт

The Old One
Получить номер строки кода, активной в данный момент

Вот такая проблема.
Решил для детализации логов использовать дополнительную информацию об ошибке - в каком классе, на какой строке она произошла.

сделал так:
PHP:
class BaseClass
{
...
  function getLocationInfo()
  {
	$info = "(file '" . __FILE__ . "', line " . __LINE__ . ", class '" . __CLASS__ . "')";
	return $info;
  }
}


class MyClass extends BaseClass
{
...
$this->log_engine->logError("error at " . $this->getLocationInfo());
}

Однако этот приём не проходит, поскольку выводится именно информация о строке в методе родительского класса!
Неужели единственный выход - это печатать номер строки и пр. в методе каждого дочернего класса?

Как можно решить эту проблему?
 
>Неужели единственный выход - это печатать номер строки и пр. в методе каждого дочернего класса?
да.
при вызове метода указывать строку и файл.
PHP:
$obj->method($agrs,__FILE__,__LINE__);
__FILE__ & __LINE__ - это константы, которые подставляются в процессе парсинга самого файла.
 
можно еще попробовать функцию debug_backtrace, если РНР не ископаемой версии.
 
можно еще попробовать функцию debug_backtrace, если РНР не ископаемой версии.
Спасибо, это был хороший совет!
P.S. Метод выглядит так:
PHP:
function getLocationInfo()
{
	$output_before = ob_get_contents();
	if ($output_before === FALSE) 
		ob_start();
	else
		ob_clean();
	print_r(debug_backtrace());
	$info = ob_get_contents();
	ob_end_clean();
	if ($output_before!== FALSE)
		echo $output_before;
	
	return $info;
}
 
я бы рекомендовал Xdebug.org, там чуть побольше функциональность.
 
2tony2001 - спасибо! Правда, для меня это пока несколько чересчур навороченно :)
2Фанат - где?
 
вот эта функция?!
С кучей буфферинга и прочее?
Для его она?
что она делает?
то же самое что и
function getLocationInfo() {
return debug_backtrace();
}
?
 
Мне нужен текст - а это, имхо, самый быстрый способ получить его.
Лучше получить массив, пробежать по нему (учитывая то что будет потенциально большое количество вложенных массивов в элементе args), и сложить из всех элементов текст? :)

что она делает?
то же самое что и
function getLocationInfo() {
return debug_backtrace();
}
неправда.
 
самый быстрый для кого?
Для программиста, который не умеет написать рекурсивную функцию (которая по объему получится не больше этого произведения) или для скрипта, который должен буферить вывод?
 
Для программиста, разумеется.
Функцию-таки пришлось написать - чтобы при обычном уровне отслеживания ошибок в лог не попадали args - иначе шибко уж большие записи получаются...
 
Сверху