![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Muerto |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Хочу пройти сертификацию Zend, и изучаю ихнею книгу...
Наткнулся на такой пример (Страницы 34 если это кому то важно)
Как бы по большому счету мне очень ясно что оно делает, но с другой стороны я пытаюсь себе представить выполнение этой функции, и мне кажется здесь как бы что то не сходиться... а теперь подробней... и с моими комментариями
По мне так ихний пример кароч, создает бесконечный цикл рекурсивно... |
||||
|
|||||
| IgorIV |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: 2 Всего: 8 |
Создается массив, а не вызов функции. Я так вижу ...
|
|||
|
||||
| SneG0K |
|
|||
|
Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
Рекурсии не будет. Сначала вызовется новый обработчик, далее старый и все. Не похоже ли?
Добавлено @ 10:06 Тут что-то вроде этого, только без ООП Добавлено через 12 минут и 32 секунды Только вот зачем? Это сообщение отредактировал(а) SneG0K - 10.9.2010, 10:08 |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
SneG0K, Мне не очень понятно...
Если мы сделали вот такое
То что получил $oldErrorHandler ? И что собственно сделает вызов $oldErrorHandler ($errNo, $errStr, $errFile, $errLine, $errContext); Будет дли двойная запись в лог? или даже этого не будет? |
|||
|
||||
| enoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 30.6.2010 Где: Санкт-Петербург Репутация: 11 Всего: 13 |
set_error_handler возвращает предыдущий обработчик ошибок, если он был.
В callback функции выполняются нужные действия + вызывается старый обработчик. Зависит от реализации стандартного и своего обработчика. Добавлено через 1 минуту и 30 секунд Например logToFile() пишет ошибку в лог, а $oldErrorHandler выводит ошибку и завершает работу скрипта. |
|||
|
||||
| Muerto |
|
||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
В общем я тупанул немного... но тем не менее не до конца ещё ясно что тут к чему...
Я чет когда с книги смотрел, не заметил что logToFile это функция которая не часть php и её нужно писать... Протестировал немного, и ещё больше запутался
Этот код, НИЧЕГО НЕ ВЫВОДИТ если пытаться посмотреть что в $a , то там пустота... в тот час как
Если же записать
до IF то выведет... Значит свою роль оно делает... оно назначило функцию myErrorHandler2 как наш оброботчик ошибок... но зачем мы просто не сделали set_error_handler ('myErrorHandler2'); А сделали $a=set_error_handler ('myErrorHandler2'); Для меня все же загадка К примеру если после
добавить
У нас будет рекурсивный вызов...и вам распечатает 8, Undefined variable: zus, /home/tim/www/linux.rf/test.php, 14, Array8, пару десятков тысач раз Поэтому с моей точки зрения пример просто ужастный... цель $a = set_error_handler все же не понятна увы Это сообщение отредактировал(а) Muerto - 10.9.2010, 13:34 |
||||||||||
|
|||||||||||
| enoff |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 30.6.2010 Где: Санкт-Петербург Репутация: 11 Всего: 13 |
Есть обработчик ошибок. Как уже говорил, например, он выводит ошибку на экран и останавливает работу скрипта. Нам нужно расширить этот обработчик, добавить запись в лог. Пишем свою функцию, записываем в лог, а в конце вызывает старый обработчик, если он существует. Что тут непонятно? Код снежка в начале темы показывает, что когда вызывается.
Добавлено @ 14:23 В переменной $oldErrorHandler содержится название старой функции. upd Может быть непонятно
upd2
ну да, еще можно в while(true){} засунуть, эффект тот же. Степень бредовости тоже. Это сообщение отредактировал(а) enoff - 10.9.2010, 14:41 |
||||||
|
|||||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Я себе примерчик намутил и примерно стало ясно что оно делает...
Вывело yyy zzz yyy zzz Я просто ожидал что $a = set_error_handler ('myErrorHandler3'); перенесет в $a параметр 'myErrorHandler3' А на деле оно переносит 'myErrorHandler2' и затем объявляет новый обработчик... Это сообщение отредактировал(а) Muerto - 10.9.2010, 14:55 |
|||
|
||||
| enoff |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 30.6.2010 Где: Санкт-Петербург Репутация: 11 Всего: 13 |
ладно мне, но мануалу то, наверное, можно верить? ### |
||||
|
|||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
enoff, Здесь дело не в вере =-)
Просто зациклился на том что роль set_error_handler () только выставить нынешний хэндлер... |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |