За последние 24 часа нас посетили 30511 программистов и 1809 роботов. Сейчас ищут 913 программистов ...

классы: вызов в одном классе функций другого.

Тема в разделе "Прочие вопросы по PHP", создана пользователем DarkElf, 22 окт 2006.

  1. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Суть проблемы:

    есть два класса, один для работы с БД, второй - для обработки ошибок.

    (php4)

    класс mysql содержит метод connect()
    там же проверяется условие, успешно ли подключение, если нет, то пытаюсь вызвать метод parse класса error, но он как-то не вызывается, в классе mysql есть объявление $error = new error;

    но при вызове ни ошибок, ничего не происходит=(

    В чем может быть проблема?
     
  2. Davil

    Davil Guest

    Каким образом вы пытаетесь вызвать метод другого класса? (код)
     
  3. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    PHP:
    1. class mysql{
    2. $error = new error;
    3. ...
    4. function connect(){
    5. $dbh = mysql_connect(SERVER, LOGIN, PWD);
    6. if(!$dbh){$error->parse("true", mysql_error(), "Не удалось соединится с mysql, строка: **");};
    7. }
    8. ...
    9. }
    При этом пробовал вообще комментировать строки с соединением с БД, все равно никакого эффекта.
    ф-ция parse - просто выводит второй и третий параметры в браузер, первый - остановка исполнения приложения методом exit();
     
  4. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    физически оба класса находятся в одном файле-библиотеке, который загружается require в основной файл
     
  5. Davil

    Davil Guest

    А что именно не работает, может просто true надо передавать не в кавычках (не как текст)? Можно ли посмотреть код класса $error?
     
  6. Davil

    Davil Guest

    Да, и
    Там с кавычками все нормально, или их все же нет?
     
  7. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    PHP:
    1. class errors{
    2.     var $mode = "debug";
    3.     function parse($exit_flag, $error, $comment){
    4.         global $mode;
    5.         //Проверяем режим сообщения об ошибке, в соответствии с ним определяем, куда отправлять сообщение
    6.         if($mode == "debug"){print("Произошла ошибка: ".$error."<br>Ее более подробное описание: ".$comment);}
    7.         elseif($mode == "stand"){parse_file($error, $comment);};
    8.         //Проверяем, надо ли останавливать программу
    9.         if($exit_flag =='true'){exit();};
    10.     }
    11.     function parse_file($error, $comment){
    12.         $f = fopen(ERROR_LOG_PATH, "");
    13.     }
    14. }
     
  8. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Davil

    SERVER и т.п. - это константы
     
  9. Davil

    Davil Guest

    error !== errors
     
  10. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    PHP:
    1. class mysql{
    2.     function connect(){
    3.         $error = new errors;
    4.         /*$dbh = mysql_connect(SERVER, LOGIN, PWD);
    5.         mysql_select_db(DB);*/
    6.         if(!$dbh){$error->parse("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php");}
    7.         else{return($dbh);};
    8.     }
    9.     function disconnect($dbh){
    10.         mysql_close($dbh);
    11.     }
    12. }
    PHP:
    1. class errors{
    2.     var $mode = "debug";
    3.     function parse($exit_flag, $error, $comment){
    4.         global $mode;
    5.         //Проверяем режим сообщения об ошибке, в соответствии с ним определяем, куда отправлять сообщение
    6.         if($mode == "debug"){print("Произошла ошибка: ".$error."<br>Ее более подробное описание: ".$comment);}
    7.         elseif($mode == "stand"){parse_file($error, $comment);};
    8.         //Проверяем, надо ли останавливать программу
    9.         if($exit_flag =='true'){exit();};
    10.     }
    11.     function parse_file($error, $comment){
    12.         $f = fopen(ERROR_LOG_PATH, "");
    13.     }
    14. }
    в выводе браузера содержится только сообщение, что переменной $dbh не существует.
     
  11. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Чебурген

    то по php5, а классы и все остальное должно быть на php4
     
  12. Anonymous

    Anonymous Guest

    Зачем? Надо:
    Код (Text):
    1. $this->mode
    Аналогично:
    Надо:
    PHP:
    1. if(![u]$this->dbh[/u]){[u]$this->error->parse[/u]("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php");}
     
  13. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Горбунов Олег

    спасибо, так лучше=)
     
  14. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    А так слабо писать? :)
    "Произошла ошибка соединения с БД: строка ".__LINE__.", ".__FILE__
     
  15. NIKO

    NIKO Активный пользователь

    С нами с:
    10 фев 2006
    Сообщения:
    655
    Симпатии:
    0
    Адрес:
    Armenia
    А может изметнить $error->parse("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php"); на errors::parse("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php"); и убрать нах... $error типо так
    PHP:
    1. class mysql{
    2.    function connect(){
    3.       /*$dbh = mysql_connect(SERVER, LOGIN, PWD);
    4.       mysql_select_db(DB);*/
    5.       if(!$dbh){errors::parse("true", mysql_error(), "Произошла ошибка соединения с БД: строка 70, classes.php");}
    6.       else{return($dbh);};
    7.    }
    8.    function disconnect($dbh){
    9.       mysql_close($dbh);
    10.    }
    11. }
    12.  
    13.  
     
  16. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    vb

    не факт, что в переменной окажется нужная строка, там прописывается источник, вызвавший ошибку, а не то, на какой строке скрипта прописан ее вывод.

    NIKO
    или я не совсем так пробовал, или не срабатывает
     
  17. vb
    а зачем, если есть debug_backtrace()?
     
  18. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Либо я тупой, либо нифига не понятно написано.
    За тем же зачем писать 70 и classes.php

    ---
    Для тех кто в танке, или я просто не догоняю чего-то:
    константа __LINE__ - номер текущей строки (в приведенном выше примере 70)
    константа __FILE__ - имя текущего файла (в приведенном выше примере classes.php).

    Зачем их использовать - да в принципе нафиг не надо, просто когда пишут прямо "строка такая-то файл такой-то" - это меня всегда коробит. Потому что через пару дней один твой коллега дописал в скрипт сверху 123 строчки а другой еще через пару дней переместил твою функцию в другой файл и получается, что вроде выводится сообщения а в файле на 70 строки никакого намека на подобное сообщение.

    p.s.
    извиянюсь за развязные стиль речи, настроение такое... осень или усталость... :).
     
  19. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    vb

    а в том и фишка, что в этом случае мне выдадут номер текущей строки, а там - только обработчик этой ошибки.

    а пример "корректности" работы __LINE__ - для примера, забудь поставить ";" там где нужна, и введи строк 40 комментов, и норм.строку. Где он ошибку покажет? - правильно, в 41 строке.
     
  20. Anonymous

    Anonymous Guest

    DarkElf... и будет абсолютно прав.