|
|
|
| Здравствуйте, уважаемые веб-девелоперы.
Хотел спросить может быть кто знает, возможно ли использовать в качестве своего перехватчика ошибок метод какого-либо класса...в стандартной документации по ПХП наешл пример использования только с отдельной функцией, т.е.
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"
Т.е. обработчик остался старый!!! Я не понимаю что не так...подскажите, пожалуйста, ибо я в растерянности :(
Спасибо. | |
|
|
|
|
|
|
|
для: artemiusgreat
(03.06.2007 в 16:24)
| | Хм.. у мну работает. | |
|
|
|
|
|
|
|
для: 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;
|
Вобщем, буду очень благодарен если кто-то сможет мне обьяснить что все это значит и почему без верхней строчки ничего не работает при ручной установке ПХП.
А в Денвере все нормально.
Благодарю за любые комментарии. | |
|
|
|
|
|
|
|
для: artemiusgreat
(03.06.2007 в 16:24)
| | $err->test(); | |
|
|
|
|
|
|
|
для: Unkind
(03.06.2007 в 18:56)
| | Кстати, я пробовал вызывать конструктор явно, не помогало :(
Пробовал даже такой вариант:
class ErrorHandler {
static function MyHandler($no, $msg) {
echo "Error! " . $no;
}
}
set_error_handler("ErrorHandler::MyHandler");
|
Без толку (этот код тестил мой знаеомый программист на ПХП 5.х), тоже облом!
Как по мне все дело в методе установки ПХП, потому что в Денвере все работает, но к сожалению точнее обьяснить причины этого я не могу. | |
|
|
|