PDA

Просмотр полной версии : Debug кода,вывод ошибки.


m0Hze
13.12.2009, 20:05
И так допустим,имеем некий код,оформленный в виде класса.Пускай вот так:

class NameClass{
function GetError(){
$line = __line__;
$file = __file__;
echo 'Error in file:'.$file.' line:' .$line;
}
function foo(){
$error = false;
if(!$error){
$this->GetError();
}
}

[test.php]

include('class.php');
$cl = new NameClass;
$cl->foo();

Собственно,мы нарочно вызываем сообщение об ошибке,с помощью ф-ции $this->GetError.
Но,в сообщении об ошибке,будет фигурировать не стока с ошибкой,а строчка,в которой была объявлена переменная $line.ТОже самое с $file;
так же была ипробована debug_backtrace();, но ее не очень удобно использовать,ибо вызывать прихоить непосредственно в методе $this->foo(), если вызов делать в $this->GetError - тотже результат что и с первым кодом,только будет фигурировать строка и файл,те,где была объявлена $this->foo().
Собственно вопрос,какими еще способами можно заставить корректно выводить строку и файл в ошибке,если это делать из соседнего файла,да к томже с вложенными функциями.Я уже пробывал даже адрес передавать заместо &__line__, .Собственно хочу услышать мнения экспертов.Да,главное,нельз передавать эти данные(линию,и файл) непосредственно при вызове нужной мне функции,тут $this->foo(), все должно быть уже внутри класса.

m0Hze
13.12.2009, 20:24
Решение номер 1 найдено с помощью метода анального тыка.Заключаеться в следующем:

class NameClass{
function GetError(){
$bg = debug_backtrace();
print_r($bg);
}
function foo(){
$error = false;
if(!$error){
$this->GetError();
}
}

Функция будет образовывать массив,столько-мерный,сколько вложений было произведено.Так что можно сказать решение найдено,но хотелось бы посмотреть что можно еще извлечь.