Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (5) « Первая ... 2 3 [4] 5  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Работа с исключениями и trigger_error
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




twin, давай рассуждать рационально, прям как ты любишь. Я человек простой, когда подключаю библиотеку, надеюсь что она будет как то сигнализировать о нештаных ситуациях, если она будет это делать через экспешены, то мне не нужно дополнительных средств что бы отловить их, в твоем же случае мне нужно задать обработчик ошибок который будет вызывать эксепшены, и лишь потом отлавливать эти эксепшены, а так как например, у меня в системе не было обработчика ошибок и кое где проскакивали ни на что не вляющие нотисы, то мне придется дописывать обработчик ошибок для фильтрации определеных типов ошибок. В итоге, что получается, в случае эксепшенов я беру и использую, в случае trigger_error я беру и ещё до настраиваю, и все лишь из-за того что у создателя мега тараканы в голове.

Ну и как обойти тот факт, что при использовании trigger_error у тебя происходит: вызов trigger_error, потом обработчик ошибок, выброс иксючения, отлов исключения. В случае же использования исключений, порядок таков: выброс исключения, отлов исключени. Ты же говорил, что то о ресурсах, чем не довод.

И да, логгирование в случае эксепшенов сделать не трудно. Наследовался от стандартного эксепшена, в конструкторе сделал вызов логера, потом везде наследуешься от этого эксепшена, а при вызове у тебя все автоматически логируется, ????, профит!


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


chee
Я тебя прекрасно понимаю. И понимаю доводы всех, кто против. Ну кроме одного, что trigger_error устаревшая штука. Я показал на Симфони, что нифига не устаревшая, и хотя бы в таком случае exception не годится.

Но вернемся к логике.

Я тебя прекрасно понимаю, ты привык к исключениям, они тебе как родные. Но далеко не все ими пользуются. Особенно начинающие. А фреймворк как раз для них.

Мне нужен низкий порог вхождения. С результатом trigger_error знакомы все, кто хоть раз пропустил точку с запятой. Это понятно, легко и просто. А когда неискушенный пользователь увидит на экране
Цитата
Fatal error: Uncaught exception 'BadFunctionCallException' with message
он помрет от страха. Я знаю что говорю, я очень много общаюсь с новичками, так как веду курсы.

Вот почему многие (и я в том числе) не любят фреймворки. Из-за непонятного синтаксиса и обилия путанной документации. Когда на экране появится такая хрень, мало кто обратит внимание на второй блок, все полезут гуглить первый (особенно если это какой-нибудь xammp или что там, который ещё и стек вываливает кашей). А гугл ничего толкового не скажет, кроме как даст совет изучить ексепшены. И теперь прикинь, сколько народу плюнет на фреймворк и вернется к привычному самопису только из-за этого.

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

Я бы рад сделать наоборот. Преобразовать exception в trigger_error, но это потребует гораздо больших усилий (если вообще возможно, не думал). По крайней мере это затруднит дебаггинг. Потому что придется как минимум делать для ексепшенов обертки.

Ну и вторая цель - получить автоматическое логирование действий юзера. Для дальнейшего анализа. Если даже новобранец разберется с ексепшенами, то уж реализация логирования у него однозначно будет самым последним пунктом плана. Ему же нужно срочно победить мир новым фейсбуком или вконтактом минимум. Когда там думать о логах.

А логи, это репутация. В любой момент можно попросить показать лог и объяснить, что он сделал не так. И что фреймворк не читает мыслей и не делает все за него. И нужно обращаться с ним нежно и ласково. Тогда он ответит тем же. smile.gif

Предложи схему, как безболезненно сделать наоборот, чтобы ексепшены вели себя как триггеры, я с удовольствием реализую это на практике.

Я не смог решить такие проблемы:
1. Нотисы. То есть возможность продолжить скрипт после оповещения с сопутствующим этому логированием.
2. Логирование всей цепочки ошибок, а не только первой
3. Возможность использования простой логики, а не try... catch при обработке ошибок. Это важно, так как нужен низкий порог вхождения.

Еще есть мелочи, но это уже не важно, мне хватило и этого.

Самым очевидным решением влоб были бы обертки. Но чем они лучше нативного trigger_error мне не понятно. Пока из доводов я услышал что-то невнятное про древность и какашки. А это для меня не довод, ты знаешь. smile.gif

Кстати. Я не полностью же от них отказался. Есть места, где и без исключений сложно. Но в общей массе скриптов фреймворка на мой взгляд это довольно оптимальное и достаточно функциональное решение.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Цитата (chee @ 31.10.2015 - 16:22)
Ты же говорил, что то о ресурсах, чем не довод.

В случае дебаггинга о ресурсах думать нужно в последнюю очередь. А так то да, говорил, говорю, и буду говорить. smile.gif

Цитата (chee @ 31.10.2015 - 16:22)
И да, логгирование в случае эксепшенов сделать не трудно. Наследовался от стандартного эксепшена, в конструкторе сделал вызов логера, потом везде наследуешься от этого эксепшена, а при вызове у тебя все автоматически логируется, ????, профит!

Это у меня было реализовано в первом варианте. Вернее не совсем реализовано, но вызов логера в наследнике был)) Не хватило мне этого.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




twin, trigger_error не устарела, по факту она не нужна, понимаешь? Устарела != Не нужна.

Цитата (twin @ 31.10.2015 - 21:08)
Преобразовать exception в trigger_error, но это потребует гораздо больших усилий (если вообще возможно, не думал)

Нахрена это делать, приведи случай такого кейса, желательно реальный.

Цитата (twin @ 31.10.2015 - 21:08)
А логи, это репутация. В любой момент можно попросить показать лог и объяснить, что он сделал не так.

Я не понимаю, как это связано с исключениями, нету проблемы с логгирование при использовании исключений. Ты тупо надумываешь проблему. Я тебе даже выше привел пример, как решить твой "странные" запросы к организации логов, с помощью исключений.

Цитата (twin @ 31.10.2015 - 21:08)
Ну и вторая цель - получить автоматическое логирование действий юзера. Для дальнейшего анализа.

Я не фига не понял, переформулируй. Что подразумевается под пользователем? Что в себя включает анализ?

Вообще хватит прикрываться "тупыми новичками", это не довод ни разу. Это как мне говорить, что твой код говно, потому что моя соседка сказало, что она боится как ты объявляешь константы в нём. Абсурдно, да? Я думаю, да.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Razzwan  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 23 дня
Карма: 10




Цитата (twin @ 31.10.2015 - 21:08)
Я тебя прекрасно понимаю, ты привык к исключениям, они тебе как родные. Но далеко не все ими пользуются. Особенно начинающие. А фреймворк как раз для них.

Вот я задавал вопрос на данную тему на ru.SO Ошибки и исключения. Что когда использовать и как?

В чем же отличие, как я для себя решил. (в прочем, это мое решение совпадает с документацией php и со статьей на хабре.)

Error - ошибка - это ошибка скрипта, которую вызвал сбой системы или непредвиденные действия злого (или очень "хитроумного") пользователя. Хороший пример - опечатка в коде (ошибка парсинга) или невозможность подключиться к базе данных (ошибка работы с бд.). Ошибку ДОЛЖЕН исправить разработчик, поэтому ошибки можно и НУЖНО логировать и слать уведомления на почту разработчику, если такое приключилось.

Exception - исключение - это исключительная ситуация, которую я, как разработчик, предвидел. Т.е. я знаю, что эта ситуация будет непременно возникать в коде вновь и вновь, и мне просто иначе нужно на нее реагировать. Говорят "выбросить исключение". Т.е. заставить программу работать в этой ситуации иначе. Хороший пример - деление на ноль. Я знаю, что такое будет возникать. Когда пользователь разделит на ноль, то результат будет неопределен (или равен бесконечности) - об этом я сообщаю пользователю. Никакого логирования здесь не нужно. И уж тем более никаких мэйлов разработчику.

Исключением так же может являться любая неосновная ветка работы моего скрипта. Например, мой скрипт должен отдать пользователю какие-то данные, но пришло сообщение, что пользователь уже в них не нуждается (он передумал) - вот тебе исключение. Т.е. я прекращаю собирать данные и никуда их не отправляю (хотя основная идея моего скрипта - отправлять данные). Мне больше ничего не нужно делать. Все. Мне здесь не нужны никакие логи. Максимум, что я могу - это записать для статистики, сколько же раз всего пользователи соизволили отказаться от информации. Просто чтоб знать. Это другой механизм и его ни в коем случае нельзя путать с ошибками, которые, еще раз повторю, НУЖНО ИСПРАВЛЯТЬ.

Теперь ближе к коду. Давайте пройдемся по мануалу:
Обработкой ошибок в php занимается встроенный механизм. Когда случается ошибка (сбой системы) - этот механизм адекватно на нее реагирует: завершает выполнение скрипта, если ошибка критична, и продолжает его, если она несущественна. Все. Здесь же есть смысл записать ошибку в логи и отправить уведомление разработчику, что ему нужно ИСПРАВИТЬ код. ЛИКВИДИРОВАТЬ ошибку. Скрипт при возникновении ошибки может так же выбросить исключение (о боже!), если выставлена соответствующая настройка в php.ini или при помощи директивы error_reporting(E_ALL). Это делают разработчики, чтоб проще было ИСПРАВЛЯТЬ ошибки во время кодирования. На работающем сайте все сообщения об ошибках, которые генерирует встроенный обработчик ДОЛЖНЫ БЫТЬ ВЫКЛЮЧЕНЫ. Для пользователя на сайте НЕТ ошибок. Ошибки есть ТОЛЬКО ДЛЯ РАЗРАБОТЧИКА. Для пользователя на сайте есть только ИСКЛЮЧЕНИЯ. Т.е. запланированные реакции скрипта на возникшую ситуацию.

Что мы можем делать при помощи исключений? Да все что угодно. В том числе и реагировать каким то заранее запланированным образом на возникшую ошибку.

Ну и, наконец, самое главное. Копипаст из мануала, как работают те или иные функции в php:

1. set_error_handler(пользовательская функция) — Задает определенный пользователем обработчик ошибок. Т.е. разработчик решает добавить логирование в случае возникновения ошибки и отправить пользователю вместо чистого листа (заготовленного php на этот случай) красивую страничку, что мол извините, что-то пошло не так, попробуйте ка вот эту ссылку. (статус HTTP ответа 500)

2. set_exception_handler(пользовательская функция) — Задает пользовательский обработчик исключений - эта функция задает обработчик по умолчанию для случаев, когда исключение выброшено вне блока try/catch. Т.е. решает проблему его существования (для twin-а)

3. trigger_error(сообщение, статус генерируемой ошибки) — Вызывает пользовательскую ошибку/предупреждение/уведомление - тут нужно уточнить, что предупреждение и уведомление - это виды некритичных ОШИБОК. (E_USER_WARNING, E_USER_NOTICE)

4. throw new Exception('Сообщение, которое хотим передать обработчику исключений'); можно использовать в связке с set_exception_handler() без блока try catch.

Так что все твои, twin, надуманные преимущества от незнания. Сам это понял вот недавно (хотя думал, что понимаю уже давно). Нет ничего стыдного в том, что кто-то чего-то не знает. Я еще очень многого не знаю. Нам всем еще многое предстоит узнать, понять, осмыслить. wink.gif


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Razzwan  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 23 дня
Карма: 10




Цитата (chee @ 31.10.2015 - 22:22)
twin, trigger_error не устарела, по факту она не нужна, понимаешь? Устарела != Не нужна.
Можно использовать для генерации ошибки при отсутствии подключения к БД.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Цитата (chee @ 31.10.2015 - 18:22)
Вообще хватит прикрываться "тупыми новичками", это не довод ни разу.

Как ты сразу объявил новичков тупыми. Они вовсе не тупые, у них пока недостаточно знаний.

И я ими не прикрываюсь, ты не так понял. Я пытаюсь сделать фреймворк для них. Тоесть я должен предвидеть, что они подумают и как отреагируют на ту или иную ситуацию.

Дело в том, что PHP - очень демократичный язык. Потому и безумно популярен. И совсем необязательно заканчивать университетов, чтобы суметь написать на нем пару домашних страниц. Очень много, катастрофически много, таких, кто учится сам, один. Без консультантов и помошников. И ексепшены для них, это что-то запредельное.

Давай из жизни пример. Человек решил научиться водить машину. С чего ему начать? С умения жать на тормоз левой ногой и управляемых заносов? Он должен сначала просто научиться тронуться с места. Оптимальным для него решением будет коробка-автомат, которая сама решает, в какой момент начать движение, как не сильно затормозить передачей, чтобы лоб не расшибить. А вот когда он научится мало-мальски крутить руль и не сшибать пешеходов, тогда и самое время подумать о виртуозном вождении.

В случае с эксепшенами получается наоборот. Чистая механика. Не умеешь плавно отпускать сцепление (читай: обрабатывать исключения), при попытке тронуться либо мотор заглохнет, либо лбом в лобовуху.

Цитата (chee @ 31.10.2015 - 18:22)
Нахрена это делать, приведи случай такого кейса, желательно реальный.
Далеко за примером бегать не нужно. Вот, в этой же ветке (надеюсь Arh не обидится smile.gif )
Человек написал целую CMS, причем не просто так, три строчки. Там претензия на ООП, по крайней мере классы используются. А как работать с исключениями толком не знает. Вот тебе и кейс. Ты просто либо забыл, как сам был новичком, либо никогда им небыл, а сразу учился у профессионалов. Не у всех есть такая возможность.

Поэтому мне и нужно нативное поведение фреймворка. Не должен он делать ничего сверх того, что делает чистый PHP. Это в идеале. По крайней мере у меня такая цель: минимизировать различия синтаксисов и поведений.

Так что мне обязательно нужно, чтобы из коробки (без настроек) фреймворк не бросал исключений. Но на ошибки реагировал. Потому и нужно, чтобы он умел преобразовывать одно в другое. Научится человек немного ездить, можно и к дрифту приступать, переключив всего одну единственную настройку. Но начать он должен вовсе не с эксепшенов.

Вот я и спросил, как преобразовать одно в другое. Триггер в ексепшены преобразовывается легко. Наоборот у меня не вышло. Может квалификации не хватило. wink.gif

Цитата (chee @ 31.10.2015 - 18:22)
Я не фига не понял, переформулируй. Что подразумевается под пользователем? Что в себя включает анализ?
Юзер в данном случае - программист, пользующийся фреймворком. Анализ - разбор его действий. Допустим он в своем приложении допустил плавающий баг. То же деление на ноль без валидации. И задает вопрос - какого хрена у меня посетители жалуются, что часто вылетает 500. Нужно в логи смотреть, а как иначе. Но если это ексепшен, причем отловленный, но лог не реализован, куда смотреть? Вот сделал он в своем catch красивую 500, как у Santehnick, а логирование не сделал. Я писал выше почему, не до того ему сейчас. Куда будем смотреть? Наследование это хорошо конечно, у меня так и сделано. Можно в него засунуть trigger_error с собачкой, но для чего? Все равно это не решает других проблем. И не дает возможности использовать нативные возможности PHP.

Razzwan, очень увлекательное чтиво. Я читал и сердце наполнялось радостью. Неужели хоть кто-то меня понял. А последняя фраза просто как обухом по голове. Это оказывается для меня! ohmy.gif

Ты долго отсутствовал и пропустил много интересного. Все это я уже неоднократно тут повторял. Что ошибка, это не исключение. Вот хотя бы тут.
Цитата (Razzwan @ 31.10.2015 - 21:12)
Это делают разработчики, чтоб проще было ИСПРАВЛЯТЬ ошибки во время кодирования. На работающем сайте все сообщения об ошибках, которые генерирует встроенный обработчик ДОЛЖНЫ БЫТЬ ВЫКЛЮЧЕНЫ. Для пользователя на сайте НЕТ ошибок. Ошибки есть ТОЛЬКО ДЛЯ РАЗРАБОТЧИКА. Для пользователя на сайте есть только ИСКЛЮЧЕНИЯ. Т.е. запланированные реакции скрипта на возникшую ситуацию.
Все это верно. Выключен должен быть не обработчик. А вывод отчетов в поток. С одновременным логированием и генерацией 500. А логированием ексепшенов должен заниматься пользователь фреймворка. А я вот что-то не припомню, чтобы ты в своих видеокурсах начинал учить людей с этого. biggrin.gif

Так что не по адресу претензия в непонимании. Если ты, написав такой трактат, сделал вывод, что я поступаю неверно, значит просто сам пока ничего не понял.

Ну и отвлеченно. Самое смешное в этой ситуации то, что с trigger_error возможны совершенно различные настройки. Как error_reporting(), так и опциями фреймворка. Я могу по разному реагировать на него. Там 5 настроек, в отличии от ексепшенов. Я могу сделать исключениями всё. Могу только E_USER_ERROR, могу E_USER_WARNING, могу отфильтровать E_NOTICE, могу скомбинировать их. Что я могу с ексепшенами? Только слезно умолять пользователя фреймворка досконально изучить ексепшены. sad.gif


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Razzwan  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 23 дня
Карма: 10




Цитата (twin @ 1.11.2015 - 06:19)
А я вот что-то не припомню, чтобы ты в своих видеокурсах начинал учить людей с этого.  
да, отличная идея. Завтра запишу видео.

Цитата (twin @ 1.11.2015 - 06:19)
Выключен должен быть не обработчик. А вывод отчетов в поток.
я написал: "все сообщения об ошибках, которые генерирует встроенный обработчик [ошибок] ДОЛЖНЫ БЫТЬ ВЫКЛЮЧЕНЫ."

Цитата (twin @ 1.11.2015 - 06:19)
Так что не по адресу претензия в непонимании. Если ты, написав такой трактат, сделал вывод, что я поступаю неверно, значит просто сам пока ничего не понял.
ты, может, и верно поступаешь. Даже очень. В глобальном смысле. Я написал для тех "новичков" и не только, которым, возможно, эта информация поможет разобраться в вопросе. Но, и в не меньшей степени, для себя. Чтоб расставить все на места у себя в голове, полагая, что ты тоже в этом нуждаешься. Ошибся - прости.

Цитата (twin @ 1.11.2015 - 06:19)
Самое смешное в этой ситуации то, что с trigger_error возможны совершенно различные настройки.
"В принципе, можно и зайца научить курить - нет ничего невозможного"(с) Я вообще за любые лайф хаки, если они обоснованы. Я понял, как пользоваться исключениями и обработчиками ошибок - поэтому буду рассказывать о своем понимании новичкам. Всех своих нынешних и будущих учеников я буду учить в соответствии со своими самыми последними выводами. Прогресс знаний, так сказать.

Да, я вчера чего-то не понимал. Это была моя проблема. Я ее решил. Я буду рассказывать новичкам о своем решении, чтоб они развивались быстрее меня. Так устроена жизнь. Придумали автомобили - никто не ездит на лошадях. Не потому, что лошади - это зло. Я люблю лошадей. Просто есть лучший вариант.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Цитата (Razzwan @ 1.11.2015 - 02:46)
Да, я вчера чего-то не понимал. Это была моя проблема. Я ее решил. Я буду рассказывать ученикам о своем решении, чтоб они развивались быстрее меня. Так устроена жизнь. Придумали автомобили - никто не ездит на лошадях. Не потому, что лошади - это зло. Я люблю лошадей. Просто есть лучший вариант.

А я разве с этим спорил? Вопрос не в том, надо ли учить вообще. Вопрос в последовательности и приоритетах. Вот для того, чтобы начать пользоваться твоим фреймворком, нужно сначала изучить ексепшены, только потом приступать к кодам. Это у многих отбивает мотивацию.

А когда сразу все работает, а потом плавно подводим, что лучше бы включить опцию exception, потому что это круто, это прогресс, это TRU, и в этот момент дать исчерпывающую информацию, как с ними бороться - вот мотивация. Когда уже что-то работает, есть результат, человек поверил в свои силы, тогда он замотивирован сделать лучше. А начинать учить вождению с дрифта... Не знаю, многие ли захотят в такую автошколу. Скорее они предпочтут ездить на автобусе.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Razzwan  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 23 дня
Карма: 10




Цитата (twin @ 1.11.2015 - 07:08)
Вот для того, чтобы начать пользоваться твоим фреймворком, нужно сначала изучить ексепшены, только потом приступать к кодам.

Пара важных замечаний:
1. Все что я делаю - принадлежит, в конечном итоге, всему человечеству. Поэтому человек, который будет пользоваться нашим фрэймворком - будет пользоваться СВОИМ фрэймворком.
2. Для того, чтоб пользоваться любым фрэймворком, не только нашим, можно ничего не знать об исключениях.

Цитата (twin @ 1.11.2015 - 07:08)
Вопрос не в том, надо ли учить вообще. Вопрос в последовательности и приоритетах.
Да, согласен.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Цитата (twin @ 1.11.2015 - 06:19)
Далеко за примером бегать не нужно. Вот, в этой же ветке (надеюсь Arh не обидится smile.gif )

Я так и не понял, где там пример того о чём я тебя прошу. Давай другой пример, что бы я без объяснений понял. Еще повторюсь раз, мне нужен случай, желательно реальный, когда исключение нужно было трансформировать пользовательскую ошибку(подобия вызова через trigger_error).

Цитата (twin @ 1.11.2015 - 06:19)
Человек написал целую CMS, причем не просто так, три строчки. Там претензия на ООП, по крайней мере классы используются. А как работать с исключениями толком не знает. Вот тебе и кейс. Ты просто либо забыл, как сам был новичком, либо никогда им небыл, а сразу учился у профессионалов. Не у всех есть такая возможность.

Поэтому мне и нужно нативное поведение фреймворка. Не должен он делать ничего сверх того, что делает чистый PHP. Это в идеале. По крайней мере у меня такая цель: минимизировать различия синтаксисов и поведений.

Так что мне обязательно нужно, чтобы из коробки (без настроек) фреймворк не бросал исключений. Но на ошибки реагировал. Потому и нужно, чтобы он умел преобразовывать одно в другое. Научится человек немного ездить, можно и к дрифту приступать, переключив всего одну единственную настройку. Но начать он должен вовсе не с эксепшенов.

Вот я и спросил, как преобразовать одно в другое. Триггер в ексепшены преобразовывается легко. Наоборот у меня не вышло. Может квалификации не хватило. wink.gif

Может хватит уже воду лить, привел неудачный пример и начинаешь делать выводы с наливанием воды во все что можно. Уже не первый раз.



Цитата (twin @ 1.11.2015 - 06:19)
Дело в том, что PHP - очень демократичный язык. Потому и безумно популярен. И совсем необязательно заканчивать университетов, чтобы суметь написать на нем пару домашних страниц. Очень много, катастрофически много, таких, кто учится сам, один. Без консультантов и помошников. И ексепшены для них, это что-то запредельное.

Давай из жизни пример. Человек решил научиться водить машину. С чего ему начать? С умения жать на тормоз левой ногой и управляемых заносов? Он должен сначала просто научиться тронуться с места. Оптимальным для него решением будет коробка-автомат, которая сама решает, в какой момент начать движение, как не сильно затормозить передачей, чтобы лоб не расшибить. А вот когда он научится мало-мальски крутить руль и не сшибать пешеходов, тогда и самое время подумать о виртуозном вождении.

В случае с эксепшенами получается наоборот. Чистая механика. Не умеешь плавно отпускать сцепление (читай: обрабатывать исключения), при попытке тронуться либо мотор заглохнет, либо лбом в лобовуху.

Сколько воды, я сейчас захлебнусь.

Цитата (twin @ 1.11.2015 - 06:19)
И я ими не прикрываюсь, ты не так понял. Я пытаюсь сделать фреймворк для них. Тоесть я должен предвидеть, что они подумают и как отреагируют на ту или иную ситуацию.

Я тебя понял как надо, а именно, когда у тебя кончаются доводы, ты говоришь, что новичкам так проще. Какие твои доказательства, пока что я видел лишь кучу твоих рассуждений, коль уж на то пошло, реальный пример из практики, где был эксепшен, где дрожал новичок и как ты решал эту задачу.

Цитата (twin @ 1.11.2015 - 06:19)
Юзер в данном случае - программист, пользующийся фреймворком. Анализ - разбор его действий. Допустим он в своем приложении допустил плавающий баг. То же деление на ноль без валидации. И задает вопрос - какого хрена у меня посетители жалуются, что часто вылетает 500.

Смотри код

<?php

ini_set('error_log', dirname(__FILE__) . '/error.log');

set_error_handler(function ($errno, $errstr) {
throw new \Exception($errstr, $errno);
});

$a = 33;
$b = 0;

$c = $a / $b;

Если исключения не отлавливать, то все логируется в php лог, а если вообще все не захваченные исключение хочется отлавливать, то там нужно всегда делать лог в самом перехватчике не отловленных исключений. Ну то есть


<?php

ini_set('error_log', dirname(__FILE__) . '/error.log');

set_exception_handler(function (\Exception $exception) {
error_log(get_class($exception) . ':' . $exception->getMessage() . "\n" . $exception->getTraceAsString(), 0);
});

set_error_handler(function ($errno, $errstr) {
throw new \Exception($errstr, $errno);
});

$a = 33;
$b = 0;

$c = $a / $b;

И не надо трахать себе мозг.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


chee
Ты или глухой, или тупой. Надеюсь на первое.
Ладно, без воды.

Этот фреймворк не для тебя. Не примеряй его на свои привычки. Этот фреймворк для таких, как Arh, которые понятия не имеют, что такое ексепшен и как его обрабатывать.

Не нужно мне твое мнение, как удобнее ТЕБЕ. Ты все равно никогда не будешь юзать мой фреймворк. Мне важно, чтобы он понравился тем, кто занимается PHP сам, один, и совсем недолго.

Я не собираюсь сначала учить его ексепшенам, а потом только фреймворку. Я хочу наоборот.

Как сделать так, чтобы исключения работали как штатный обработчик ошибок (сиреч trigger_error)?

Твоя схема на любой писк типа штатного нотиса или E_USER_ERROR отработает как ексепшен. Мне это НЕ НУЖНО.

Я может хочу закидать весь фреймворк нотисами в учебном режиме, а в боевом их выключить. Но логировать при этом.

Хватит уже летать под облаками и строить из себя обалденного взрослого дядю. Вспомни детство, когда с мокрыми штанами в песочнице рылся. Не рождаются люди с умением обрабатывать ексепшены. Это не привито на генетическом уровне. Это приходит с опытом.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Цитата (twin @ 1.11.2015 - 11:40)
Ты или глухой, или тупой

Доводы кончались, оскорбления начинались. Кек.

Цитата (twin @ 1.11.2015 - 11:40)
Как сделать так, чтобы исключения работали как штатный обработчик ошибок

Зачем это делать?

Цитата (twin @ 1.11.2015 - 11:40)
Твоя схема на любой писк типа штатного нотиса или E_USER_ERROR отработает как ексепшен. Мне это НЕ НУЖНО.

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

Цитата (twin @ 1.11.2015 - 11:40)
Я может хочу закидать весь фреймворк нотисами в учебном режиме, а в боевом их выключить. Но логировать при этом.

Крышу, что ли понесло. Что за такие хотелки, то есть ты учишь людей писать код с ошибками?

Цитата (twin @ 1.11.2015 - 11:40)
Хватит уже летать под облаками и строить из себя обалденного взрослого дядю. Вспомни детство, когда с мокрыми штанами в песочнице рылся. Не рождаются люди с умением обрабатывать ексепшены. Это не привито на генетическом уровне. Это приходит с опытом.

Тру стори раскажу. Я был молод и не опытен. Сначала я лепил собаки везде, потом я познал исключения и лишь потом я научился отлавливать стандартные ошибки через исключения, тогда же узнал о trigger_error. Нету ничего сложного в исключениях для новичка, это базисная технология для современного программиста, если наставник боится дать для изучения эту технологию, то в шею такого наставника. Упс, а наставник то ты. Лол.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Вот я так писал в 2010, как видишь собака

$_LOADER['cmps'] = @file ($_LOADER['follow']);
if ($_LOADER['cmps'])
{
unset($_LOADER['cmps'][0]);
$_LOADER['count'] = count ($_LOADER['cmps']);
while ($_LOADER['cmp'] < $_LOADER['count'])
{
$_LOADER['cmp']++;
$_LOADER['cmp_path'] = GLISS_DIR.'kernel/cmpnnt/'.trim($_LOADER['cmps'][$_LOADER['cmp']]);
if (is_file ($_LOADER['cmp_path']))
require_once ($_LOADER['cmp_path']);
else
die('<b>No Found</b> "'.$_LOADER['cmp_path'].'"');
}
}

else
die ('<b>No Found</b> "'.$_LOADER['follow'].'"');


а вот уже 2012

/**
* get object library
*
@param string $name
*
@param array $arguments
*
@return type
*
@throws Exception
*/

public function getLibrary($name, array $arguments = array()){
if (!isset($this->libraries[$name])) {
$className = $name;
if (isset($this->namespaces[$name])){
$className = $this->namespaces[$name];
}
$this->PSR_0($className);
if (!class_exists($className, false)) {
throw new Exception("Class {$className} no define");
}
$reflection = new ReflectionClass($className);
$this->libraries[$name] = $reflection->newInstanceArgs($arguments);
}
return $this->libraries[$name];
}

Но у меня не было наставника. И на сколько я себя помню, исключения заходили не очень то сложно, максимум я не понимал зачем они, то есть ситуация схожая с arh, но в понимании механизма и их отлова у меня проблем не было


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Цитата (chee @ 1.11.2015 - 07:51)
Крышу, что ли понесло. Что за такие хотелки, то есть ты учишь людей писать код с ошибками?

Я хочу сначала показать ошибку, потом научить с ней бороться. Теми же исключениями.
Цитата (chee @ 1.11.2015 - 07:51)
Тру стори раскажу. Сначала я лепил собаки везде, потом я познал исключения и лишь потом я научился отлавливать стандартные ошибки через исключения, тогда же узнал о trigger_error. Нету ничего сложного в исключениях для новичка, это базисная технология для современного программиста, если наставник боится дать для изучения эту технологию, то в шею такого наставника. Упс, а наставник то ты. Лол.

Вот видишь как долго тебе пришлось до этого доходить. Сколько времени потерял. Почему сразу не стал применять ексепшены? Не научил никто? Я тебе скажу почему. Тебе тогда казалось, что это никакие не базывые технологии, а пыль. Мешающая жить. Никто тебе не показал, что можно лучше. А скорее всего ты сам слушать не хотел. Все через это проходили.

А я хочу показать это одним движением. Одной единственной настройкой в конфиге. Что можно вот так работать, а можно гораздо лучше. Не в теории, а на практике.
Всего сразу не расскажешь. Тут человку бы объяснить, что такое this со стрелочкой, а ты про ексепшены. Да он родную мать забудет, если в него попытаться сходу вкачать все "базовые технологии", да еще и без практики.



--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (5) « Первая ... 2 3 [4] 5  Ответ в темуСоздание новой темыСоздание опроса