Вот видите! Сообща нашли решение, которое более или менее устраивает обоих.
Выводить notice прямо в callback - наиболее приемлемое, на мой взгляд, решение. Оно позволяет в случае обхода массива в цикле вывести все notices, а не только первый.
Теперь вы согласны, что исключения в PHP более прогрессивный инструмент нежели стандартные ошибки и его можно и нужно заменять?
Уф! Вам не угодишь :)
Во-первых, зачем красиво оформлять notice, если он предназначен только для разработчика? Во-вторых, а как бы вы красиво оформляли notice, не используя Exceptions - только стандартными функциями PHP?
Второй параметр в callback-функции ($errorCode) - это на самом деле:
the level of the error raised, as an integer
Так что переопределяйте метод __toString и вперед, за орденами:
public function __toString() {
if ($this->code === E_NOTICE) {
echo "Это красивый notice!!!";
}
}
А кто мешает использовать нормальный call-back? Мне нравятся лямбда-функции, но вы можете использовать то, что вам удобнее
Кто мешает вместо E_ALL поставить любую комбинацию уровней error reporting допустимых в error_reporting()? Не нравится notices? Используем в коде E_ALL & ~E_NOTICE!
Читайте внимательно мои пояснения к моему же коду :)
Лично мне кажется, что исключения более эффективный механизм контроля и обработки ошибок нежели стандартные средства, пришедшие из старых версий. Во-первых, наследование, во-вторых, сквозная генерация ошибок (во вложенных функциях и методах)
lambda-функции сейчас, может, неэффективны в силу некоторых особенностей, но в предверии выхода PHP 5.3 уже можно потихоньку на них переходить, поскольку в этом релизе ситуация изменится кардинально!
И еще одно насчет notices: The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called. Так что не волнуйтесь, E_NOTICE в исключение не передается.
Пояснения по коду:
По умолчанию, в 5-м PHP ошибки и исключения - это разные вещи, что странно. Поэтому просто ошибка при вызове функции исключения не вызовет.
YSlow - расширение для контроля и оптимизации скорости загрузки страницы. Является таким себе "универсальным советником" для верстальщика (в основном) и программиста. Функционал в некоторой степени аналогичен функционалу сайта webo.in, рекламировавшегося как-то на Хабре
LiveCoder - расширение для Firebug, которое предоставляет альтернативный интерфейс для обзора объектов DOM (то есть по сути является альтернативой встроенному DOM инспектору). Самой интересной, эксклюзивной фишкой является возможность фильтрации объектов по типу. Например, можно показывать только строковые или целочисленные члены объекта. К сожалению, не работает под FF3, и, насколько я понял, не поддерживается далее разработчиком
Firebug Net Panel History Overlay - как видно из названия, добавляет в Net панель возможность просмотра истории. То есть при переходе по ссылке или обновлении страницы, статистика по предыдущей странице не пропадает, что дает возможность сравнения скорости загрузки при внесении правок. При работе довольно часто глючит - некоторые страницы пустые, кнопки перехода срабатывают не всегда с первого раза
FirebugCodeCoverage - при выполнении кода показывает в Консоли, какие участки кода (функции) выполнялись. Как указывает сам разработчик расширение полезно при проведении автоматического тестирования. К сожалению, не работает под FF3, и, насколько я понял, не поддерживается далее разработчиком
CustomPrint - весьма странное расширение, позволяющее распечатать фрейм документа. Зачем оно нужно я не понял. Вызывается прямо из кода или из консоли: customPrintService.printFrame(frameName, options)
Jiffy - очень мощное расширение, представляющее собой профайлер для JavaScript. Работает путем добавления вызовов функций расширения прямо в коде, что несколько неудобно
Как дополнительная фишка: было бы неплохо иметь точки привязки, как в редакторах векторной графики. Ну хотя бы для прямых линий, форм и текста, если это возможно.
Есть такая книга: Лебедия. Откуда и когда появилась Украина.
Вот это просто сказка...
Стр 6.
«….не нашим предкам кто-то и откуда-то принес культуру, а наоборот, наши праотцы – древние украинцы – несли ее, первичную цивилизацию, в мире, научили другие народы – далекие и близкие – пахать, сеять, растить хлеб, ковать орала и плуги, ткать, строить дома и писать ».
«….древнеукраинский язык – мать всех индоевропейских языков… Древняя Украина (Оратта) – родина всех индоевропейских народов».
Неандерталец, человек неандертальский (лат. Homo neanderthalensis или Homo sapiens neanderthalensis) — вид (подвид) людей, населявший Европу, западную Азию от Израиля до Узбекистана, и, возможно, Северную Африку[1] в период от 230 тысяч до 24 тысяч лет назад.
Ну не на несколько минут, а на несколько дней. Повышает выносливость в основном. Можно, например, пробежать 100 км, не разу не отдохнув или еще что-нибудь. Ну а потом, да, последствия весьма негативны.
Берем данные по номенклатуре...
Политбюро ЦК ВКП(б), избранное XVI съездом ВКП(б) 13 июля 1930 г.:
К. Е. Ворошилов - русский,
Л. М. Каганович - еврей,
М. И. Калинин - русский,
С. М. Киров - русский,
С. В. Косиор - поляк,
В. В. Куйбышев - скорее всего русский,
В. М. Молотов - русский,
Я. Э. Рудзутак - латыш,
А. И. Рыков - русский,
И. В. Сталин - грузин
Кроме того, есть примечание, что:
21 декабря 1930 г. Объединенный пленум ЦК и ЦКК освободил от обязанностей члена Политбюро А. И. Рыкова и от обязанностей кандидата в члены Политбюро А. А. Андреев.Членом Политбюро был утвержден Г. К. Орджоникидзе.
4 февраля 1932 г. Пленумом ЦК из членов Политбюро выведен Я. Э. Рудзутак. Членом Политбюро избран А. А. Андреев.
А почему бы и нет?
Если Юкосовцы когда-то подавали в суд в Техасе, то почему бы россиянам не подать в собственный суд?
А шутки насчет басманного правосудия для меня, как жителя Украины, уже не смешны.
Во-первых, у нас есть собственный Шевченковский суд (в Киеве) - это украинский синоним вашего Басманного суда.
Во-вторых, судебная система Украины устроена еще более тупо, чем российская. У нас любое решение центральной власти может быть оспорено в ЛЮБОМ суде, вплоть до районного. Так что у нас с недавних пор есть еще одно нарицательное название: "Мукачевский районный суд".
Порылся в коде Меты и нашел, что она и все подобные ей системы на Украине берут данные у вот этого поставщика карт.
Вот здесь описаны возможности сервиса.
Минус: ПЛАТНЫЙ
Выводить notice прямо в callback - наиболее приемлемое, на мой взгляд, решение. Оно позволяет в случае обхода массива в цикле вывести все notices, а не только первый.
Теперь вы согласны, что исключения в PHP более прогрессивный инструмент нежели стандартные ошибки и его можно и нужно заменять?
Во-первых, зачем красиво оформлять notice, если он предназначен только для разработчика? Во-вторых, а как бы вы красиво оформляли notice, не используя Exceptions - только стандартными функциями PHP?
Второй параметр в callback-функции ($errorCode) - это на самом деле:
Так что переопределяйте метод __toString и вперед, за орденами:
public function __toString() {if ($this->code === E_NOTICE) {
echo "Это красивый notice!!!";
}
}
Вот только что проверил - работает:
Что exception вывело на экран? Так там echo стоит... Обрабатывайте как хотите.
Если вы по поводу того, что WARNING выкинул Exception, то опять же, отключите E_WARNING в set_error_handler.
Лично мне кажется, что исключения более эффективный механизм контроля и обработки ошибок нежели стандартные средства, пришедшие из старых версий. Во-первых, наследование, во-вторых, сквозная генерация ошибок (во вложенных функциях и методах)
lambda-функции сейчас, может, неэффективны в силу некоторых особенностей, но в предверии выхода PHP 5.3 уже можно потихоньку на них переходить, поскольку в этом релизе ситуация изменится кардинально!
И еще одно насчет notices: The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called. Так что не волнуйтесь, E_NOTICE в исключение не передается.
Подробнее о lambda-функциях
Вот мое решение:
Файл MyException.class.php:
class MyException extends Exception {public function __construct($message, $errorCode = 0, $errorFile = '', $errorLine = 0) {
parent::__construct($message, $errorCode);
$this->file = $errorFile;
$this->line = $errorLine;
}
}
set_error_handler(create_function('$c, $m, $f, $l', 'throw new MyException($m, $c, $f, $l);'), E_ALL);
?>
Далее в коде пишем так:
try {$a = 57 / 0;
}
catch (Exception $e) {
echo $e;
}
Пояснения по коду:
По умолчанию, в 5-м PHP ошибки и исключения - это разные вещи, что странно. Поэтому просто ошибка при вызове функции исключения не вызовет.
Как дополнительная фишка: было бы неплохо иметь точки привязки, как в редакторах векторной графики. Ну хотя бы для прямых линий, форм и текста, если это возможно.
При рисовании вставляю текст, нажимаю сохранить - затем воспроизвести. Картинка рисуется вся. Текста на итоговой картинке нет.
Браузер: FF 3.0.1
OS: Windows XP SP2
Вот это просто сказка...
Стр 6.
«….не нашим предкам кто-то и откуда-то принес культуру, а наоборот, наши праотцы – древние украинцы – несли ее, первичную цивилизацию, в мире, научили другие народы – далекие и близкие – пахать, сеять, растить хлеб, ковать орала и плуги, ткать, строить дома и писать ».
«….древнеукраинский язык – мать всех индоевропейских языков… Древняя Украина (Оратта) – родина всех индоевропейских народов».
Ну и т.д.
http://politazbuka.nnm.ru/pramater_tsivi…
Червень - июнь
Липень - июль
Политбюро ЦК ВКП(б), избранное XVI съездом ВКП(б) 13 июля 1930 г.:
К. Е. Ворошилов - русский,
Л. М. Каганович - еврей,
М. И. Калинин - русский,
С. М. Киров - русский,
С. В. Косиор - поляк,
В. В. Куйбышев - скорее всего русский,
В. М. Молотов - русский,
Я. Э. Рудзутак - латыш,
А. И. Рыков - русский,
И. В. Сталин - грузин
Кроме того, есть примечание, что:
Таким образом в Политбюро было 60% русских.
Источник
Если Юкосовцы когда-то подавали в суд в Техасе, то почему бы россиянам не подать в собственный суд?
А шутки насчет басманного правосудия для меня, как жителя Украины, уже не смешны.
Во-первых, у нас есть собственный Шевченковский суд (в Киеве) - это украинский синоним вашего Басманного суда.
Во-вторых, судебная система Украины устроена еще более тупо, чем российская. У нас любое решение центральной власти может быть оспорено в ЛЮБОМ суде, вплоть до районного. Так что у нас с недавних пор есть еще одно нарицательное название: "Мукачевский районный суд".
Вот здесь описаны возможности сервиса.
Минус: ПЛАТНЫЙ