Суть проблемы: есть два класса, один для работы с БД, второй - для обработки ошибок. (php4) класс mysql содержит метод connect() там же проверяется условие, успешно ли подключение, если нет, то пытаюсь вызвать метод parse класса error, но он как-то не вызывается, в классе mysql есть объявление $error = new error; но при вызове ни ошибок, ничего не происходит=( В чем может быть проблема?
PHP: class mysql{ $error = new error; ... function connect(){ $dbh = mysql_connect(SERVER, LOGIN, PWD); mysql_select_db(DB); if(!$dbh){$error->parse("true", mysql_error(), "Не удалось соединится с mysql, строка: **");}; } ... } При этом пробовал вообще комментировать строки с соединением с БД, все равно никакого эффекта. ф-ция parse - просто выводит второй и третий параметры в браузер, первый - остановка исполнения приложения методом exit();
А что именно не работает, может просто true надо передавать не в кавычках (не как текст)? Можно ли посмотреть код класса $error?
PHP: class errors{ var $mode = "debug"; function parse($exit_flag, $error, $comment){ global $mode; //Проверяем режим сообщения об ошибке, в соответствии с ним определяем, куда отправлять сообщение if($mode == "debug"){print("Произошла ошибка: ".$error."<br>Ее более подробное описание: ".$comment);} elseif($mode == "stand"){parse_file($error, $comment);}; //Проверяем, надо ли останавливать программу if($exit_flag =='true'){exit();}; } function parse_file($error, $comment){ $f = fopen(ERROR_LOG_PATH, ""); } }
PHP: class mysql{ function connect(){ $error = new errors; /*$dbh = mysql_connect(SERVER, LOGIN, PWD); mysql_select_db(DB);*/ if(!$dbh){$error->parse("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php");} else{return($dbh);}; } function disconnect($dbh){ mysql_close($dbh); } } PHP: class errors{ var $mode = "debug"; function parse($exit_flag, $error, $comment){ global $mode; //Проверяем режим сообщения об ошибке, в соответствии с ним определяем, куда отправлять сообщение if($mode == "debug"){print("Произошла ошибка: ".$error."<br>Ее более подробное описание: ".$comment);} elseif($mode == "stand"){parse_file($error, $comment);}; //Проверяем, надо ли останавливать программу if($exit_flag =='true'){exit();}; } function parse_file($error, $comment){ $f = fopen(ERROR_LOG_PATH, ""); } } в выводе браузера содержится только сообщение, что переменной $dbh не существует.
Зачем? Надо: Код (Text): $this->mode Аналогично: Надо: PHP: if(![u]$this->dbh[/u]){[u]$this->error->parse[/u]("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php");}
А может изметнить $error->parse("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php"); на errors:arse("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php"); и убрать нах... $error типо так PHP: class mysql{ function connect(){ /*$dbh = mysql_connect(SERVER, LOGIN, PWD); mysql_select_db(DB);*/ if(!$dbh){errors::parse("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php");} else{return($dbh);}; } function disconnect($dbh){ mysql_close($dbh); } }
vb не факт, что в переменной окажется нужная строка, там прописывается источник, вызвавший ошибку, а не то, на какой строке скрипта прописан ее вывод. NIKO или я не совсем так пробовал, или не срабатывает
Либо я тупой, либо нифига не понятно написано. За тем же зачем писать 70 и classes.php --- Для тех кто в танке, или я просто не догоняю чего-то: константа __LINE__ - номер текущей строки (в приведенном выше примере 70) константа __FILE__ - имя текущего файла (в приведенном выше примере classes.php). Зачем их использовать - да в принципе нафиг не надо, просто когда пишут прямо "строка такая-то файл такой-то" - это меня всегда коробит. Потому что через пару дней один твой коллега дописал в скрипт сверху 123 строчки а другой еще через пару дней переместил твою функцию в другой файл и получается, что вроде выводится сообщения а в файле на 70 строки никакого намека на подобное сообщение. p.s. извиянюсь за развязные стиль речи, настроение такое... осень или усталость... .
vb а в том и фишка, что в этом случае мне выдадут номер текущей строки, а там - только обработчик этой ошибки. а пример "корректности" работы __LINE__ - для примера, забудь поставить ";" там где нужна, и введи строк 40 комментов, и норм.строку. Где он ошибку покажет? - правильно, в 41 строке.