Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: error handler как метод класса
 
 автор: artemiusgreat   (03.06.2007 в 16:24)   письмо автору
 
 

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

    set_error_handler ('xError');           // set new handle
    function xError () {                            // new handle implementation
        print 'My error!';
        return;
    }
    print no_value;          // error

Я проверил, действительно работает, при генерации ошибки выдается мое собщение - "My error"

НО мне надо чтобы все это было оформлено по стандартам ООП, я попробовал следующее:

    class test {
        function test () {
            set_error_handler (array (&$this, 'xError'));
        }
        function xError ($no, $str, $file, $line, $ctx) {
            print 'My error!';
            return;
        }
    }
    $err = new test;
    print no_value;


На что ПХП грязно выругался стандартной фразой - "Notice: Use of undefined constant no_value"
Т.е. обработчик остался старый!!! Я не понимаю что не так...подскажите, пожалуйста, ибо я в растерянности :(

Спасибо.

   
 
 автор: kasmanaft   (03.06.2007 в 18:49)   письмо автору
 
   для: artemiusgreat   (03.06.2007 в 16:24)
 

Хм.. у мну работает.

   
 
 автор: artemiusgreat   (03.06.2007 в 20:09)   письмо автору
 
   для: kasmanaft   (03.06.2007 в 18:49)
 

Да, я тоже только что проверил и оказалось, что при определенных условиях и это работает...только вот при каких пока точно определить не могу :)
Я данный скрипт пробовал на Апаче, установленном вручную, и ПХП там подключался как CGI модуль...возможно поэтому set_error_handler отказался принимать метод класса в качестве нового обработчика ошибок...других причин я не вижу.
И ТУТ ВДРУГ я решил попробовать сие творение на Денвере (там ПХП вроде бы не является CGI модулем)...И О ЧУДО все работает!
Вобщем либо меня глючит, либо ПХП (кстати. и там и там установлена версия 4.3.1).

Пройдя весь этот тернистый путь выяснилось, что даже в ПХП, установленным в ручном режиме можно обойти этот глюк - сгенерировать ошибку до описания класса :) Бред конечно, но работает

Чтобы заработало надо писать так:

    set_error_handler (array(&$test, 'xError'));       // bez etogo ne rabotaet !!!!! a eshe mojno pisat                                                      
                                                                                          //  trigger_error ('')     ili   phpinfo ();
    class test {
        function test () {
            set_error_handler (array (&$this, 'xError'));
            return true;
        }
        function xError ($no, $str, $file, $line, $ctx) {
            print 'My error!';
            return true;
        }
    }
    $err = new test;


Вобщем, буду очень благодарен если кто-то сможет мне обьяснить что все это значит и почему без верхней строчки ничего не работает при ручной установке ПХП.
А в Денвере все нормально.

Благодарю за любые комментарии.

   
 
 автор: Unkind   (03.06.2007 в 18:56)   письмо автору
 
   для: artemiusgreat   (03.06.2007 в 16:24)
 

$err->test();

   
 
 автор: artemiusgreat   (03.06.2007 в 20:13)   письмо автору
 
   для: Unkind   (03.06.2007 в 18:56)
 

Кстати, я пробовал вызывать конструктор явно, не помогало :(
Пробовал даже такой вариант:


class ErrorHandler {
  static function MyHandler($no, $msg) {
      echo "Error!  " . $no;
  }
}
set_error_handler("ErrorHandler::MyHandler");


Без толку (этот код тестил мой знаеомый программист на ПХП 5.х), тоже облом!
Как по мне все дело в методе установки ПХП, потому что в Денвере все работает, но к сожалению точнее обьяснить причины этого я не могу.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования