Эта тема на forum.dklab.ru


CTAPbIu_MABP: константа __FILE__
Добрый день.
Назрел такой вопрос:
допустим есть класс


class DB
{

var $conn = NULL;
var $result = FALSE;
var $delta = 0;
var $count = 0;

public function DB($host, $user, $pwd, $db)
{
$this->conn = @mysql_connect($host, $user, $pwd, TRUE) or diefatal('MySQL error : '.mysql_error());
@mysql_select_db($db, $this->conn) or diefatal('MySQL error : '.mysql_error());
return(TRUE);
}

public function db_query($query)
{
$this->count++;
$xtime = microtime();
$this->result = mysql_query($query, $this->conn) or diefatal('MySQL error : '.mysql_error());
$ytime = microtime();
$this->delta += array_sum(explode(' ',$ytime)) - array_sum(explode(' ',$xtime));
return($this->result);
}
}


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


$DB = new DB('localhost', 'root', '', 'test');
$sql = $DB->db_query("SELECT * FROM `table` WHERE id = 15 LIMIT 1");


и база выдает ошибку я хочу видеть файл и строку в которой это произошло а не только текат ошибки, к сожалению если сделать так


$this->conn = @mysql_connect($host, $user, $pwd, TRUE) or diefatal('MySQL error : '.mysql_error().'в файле '.__FILE__.' в строке '.__LINE__);


то получаю файл в ктором находится класс а не файл в ктором вызвана функция... как быть?
Миша Спларов:
CTAPbIu_MABP
http://php.net/debug_backtrace
CTAPbIu_MABP:
Супер!!! спасибо))) лучше быть не могло))) есть вся инфа и о том где, и о том как!!! пасибо!!!

Исходя из этого сообразил вот такую функцию


privat function find_error()
{
foreach (debug_backtrace() as $arr){
$message .= (!$message) ? "An error occured in file" : " Called in file ";
$message .= $arr['file']." on line ".$arr['line']."<br />";
}
return($message);
}


может ктото еще чтото по классу посоветует или подскажет?!
Ksnk:
Хороший пример работы с debug_backtrace можно подсмотреть в http://forum.dklab.ru/viewtopic.php?t=17401
CTAPbIu_MABP:
это слишком! слишком сложно, слишком заумно, слишком долго работает, и мне просто так много не надо))) тех двух строчек с головой хватает чтобы покрыть мои потребности

НО ВСЕРАВНО СПАСИБО)))

PS смысл всего этого в том чтобы сделать самый простой и быстро работающий класс который покрое данные нужды
Maus:
Ksnk
Кстати, спасибо за ссылку - там бага была. Исправил пост
Миша Спларов:
CTAPbIu_MABP
foreach (debug_backtrace() as $arr){
$dbt=debug_backtrace();
foreach ($dbt as $arr){
Второй вариант, думаю, чуть-чуть лучше.
И вы уверены, что вам нужно выводить весь "путь" бэктрейса?..
CTAPbIu_MABP:
Второй вариант, думаю, чуть-чуть лучше.

Думаю будет логично если я спрошу "чем ?" :)
Если вы думаете что функцию нельзя представить как массив - то можно!

И вы уверены, что вам нужно выводить весь "путь" бэктрейса?..
А почему бы и нет, тем более что он не такой уж и длинный - максимум три "этапа".
Миша Спларов:
CTAPbIu_MABP
Вы правы, ничем. Тест мне это показал:
<?php

function my() {
echo '. ';
return array('123', '234', '345');
}

foreach (my() as $v) {
echo 'iteration ';
}

?>
Maus:
Миша Спларов
ну, это тря трех записей. Возможно, для тысяч картина будет иная - но это должен быть сумасшедшийй скрипт, с таким бактрейсом.
Maus:
Ветка выделена в отдельную тему «Класс для работы с MySQL»,
расположенную в форуме Разное :: PHP (07 Апреля 2006, 09:05).

Эта тема на forum.dklab.ru