Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Debug кода,вывод ошибки. (https://forum.antichat.xyz/showthread.php?t=163293)

m0Hze 13.12.2009 20:05

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

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]
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 найдено с помощью метода анального тыка.Заключаеться в следующем:
PHP код:

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


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


Время: 16:55