|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
При ошибке срабатывает вызов ErrorCatcher, и далее идет выполнение кода как ни в чем не бывало. Подскажите, как в представленном примере одновременно использовать и ErrorCatcher и обрабатывать ошибку в блоке try catch ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2019, 12:53 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
на ютубе есть всё и в гугле тоже ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2019, 20:27 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
snakenest, а какое исключение вы ждете? в коде нет throw ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2019, 20:46 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
Barlonesnakenest, а какое исключение вы ждете? в коде нет throw DivisionByZero, по всей видимости. Только вот в PHP кроме как Exception и RuntimeException есть еще и Error. В итоге имеем три базовых класса от которых могут быть наследованны исключения. У вас перехватывается только одно из них. А деление на 0 бросает исключение унаследованное от Error. Чтобы ловило все, используйте Throwable. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2019, 16:10 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
HettBarlonesnakenest, а какое исключение вы ждете? в коде нет throw DivisionByZero, по всей видимости. Только вот в PHP кроме как Exception и RuntimeException есть еще и Error. В итоге имеем три базовых класса от которых могут быть наследованны исключения. У вас перехватывается только одно из них. А деление на 0 бросает исключение унаследованное от Error. Чтобы ловило все, используйте Throwable.А, вот оно как сейчас. Во времена РНР 5.х чтобы ошибки превратить в исключения, надо было написать что-то вроде Код: php 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 09:48 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
HettBarlonesnakenest, а какое исключение вы ждете? в коде нет throw DivisionByZero, по всей видимости. Только вот в PHP кроме как Exception и RuntimeException есть еще и Error. В итоге имеем три базовых класса от которых могут быть наследованны исключения. У вас перехватывается только одно из них. А деление на 0 бросает исключение унаследованное от Error. Чтобы ловило все, используйте Throwable. Согласен ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 09:59 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
Путем проб и ошибок, и прочитав горы мусора в гуглах, дотестировался до такой вот весчи! Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
в итоге, при ошибке вызывается ErrorCatcher, который выводит текст ошибки -> восстанавливает предыдущий обработчик -> передает ему ошибку -> генерирует исключение. Но если добавить в конце : Код: php 1. 2. 3.
то вываливается Fatal error: Uncaught exception 'Exception' with message 'test exception' in ... и т.д. Есть ли способ обойти такую Fatal error ? т.е. вызвать исключение, но без обязательного обработчика catch ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 15:03 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
полудух, это конечно интересно :) но Я добавил перехват exception Код: php 1. 2. 3. 4. 5. 6. 7.
теперь не ругается так жестко :) т.е. когда установлен блок try catch, то exception обрабатывается и скрипт выполняется дальше. Если такого блока нет, то вызывается exception_handler, и скрипт останавливается.... Вопрос. обработчик срабатывает и останавливает выполнение скрипта. Как при вызове такого обработчика exception продолжить выполнение скрипта? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 15:49 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
Или, как перед вызовом Код: php 1.
проверить есть ли catch? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 15:51 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
snakenest, когда ошибка обнаружится (fatal error на почту придёт), вы её исправите и её больше не будет зачем в коде эксепшн? Он вреден. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 17:30 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
толковые программеры топят против эксепшенов вот, например, Страуструп: авторНЕ существует такой тулзы, которая сумеет проследить весь путь ДО исключения и выдать инфу по каждому шагу. Само исключение НЕ гарантирует корректность данных, они могут придти откуда угодно. и, например, Ален Голуб (автор "Верёвка достаточной длины, чтобы выстрелить себе в ногу"): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89.
Я, в своей практике написания нескольких CRM с нуля и кучи всяких скриптов, так и не нашёл, где заюзать исключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 17:40 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
полудух.... Я, в своей практике написания нескольких CRM с нуля и кучи всяких скриптов, так и не нашёл, где заюзать исключения. Мне необходимо обработать исключение для отлавливания deadlock при работе с БД, т.к. простой if не поможет. При выполнении запроса может возникнуть не только deadlock, а целый ряд ошибок (как не "бей по рукам" пользователя, но данные он может внести некорректные). Но учитывая что для всего проекта есть перехватчик ошибок, в целях логирования информации и дальнейшего разбора полетов, хотелось внести в него вызов исключения (дабы инкапсулировать обработку ошибок в одном месте). А как получается, что вызов эксепшена без catch приводит к фатальной ошибке работы скрипта и останавливает его работу, тоесть использовать данный вызов в рамках общей обработки ошибок не получится. Почему я и спрашиваю, возможно ли както определить, а есть ли catch который должен обработать эксепшн? тогда логика работы общего модуля контроля ошибок проста: ловим ошибку, и если есть catch, то вызываем эксепшн, если нет то идем дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 10:43 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
полудухтолковые программеры топят против эксепшенов у нас некоторые за плоскую зеплю топят и за отказ от прививок. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 12:10 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
snakenest, если у вас юзер может дедлокнуть БД, вам не об эксепшенах надо думать... переделывайте. ввод юзера надо проверять ДО контакта с БД ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2019, 14:44 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
полудухsnakenest, если у вас юзер может дедлокнуть БД, вам не об эксепшенах надо думать... переделывайте. ввод юзера надо проверять ДО контакта с БД Юзер - образно, автомат (не на строне моего сервера и приложения) присылает данные одномоментно, в том числе и одинаковые. т.е. данные записи могут обновляться одновременно, что и вызывает deadlock, и повлиять на это я ни как не могу, только обработать исключение и отправить запрос в БД еще раз. ввод юзера проверяется, но опять таки, есть часть данных присылаемая сервисами, а функции 100% распознавания кодировки текста не существует, отсюда опять обработка исключения. так что ситуации бывают разные, полудух... вам не об эксепшенах надо думать... переделывайте. иногда переделать просто невозможно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 14:12 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
так проверьте перед записью - установлен лок или нет или САМИ ставьте глобальный флаг, когда туда пишут, и проверяйте его snakenestиногда переделать просто невозможно :) отмазки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 18:09 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
На каждую обновляемую в субд запись ставить лок? Или может поредложишь всю таблицу локнуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 22:24 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
тут вопрос, откуда вообще взялась задача - локать если там надо следить, чтобы одну и ту же форму не сохранили 2 разных человека, то да - надо флаг ставить (временный) на каждую такую редакцию и проверять (через JS), что там всё ещё редактируют а когда один сохранит, то другому давать инфу, что "данные изменились, форму надо обновить" решений в гугле есть ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2019, 00:38 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
А если это не форма, а api куда летят несколько тысяч rps от одного клиента, что там в гугле по этому кейсу говорят? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2019, 09:02 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
* клиент не один, естественно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2019, 09:02 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
Hettapi куда летят несколько тысяч rps от одного клиента это стандартная ситуация для любого сервера надо ситуацию конкретно описывать, а не общими категориями рассуждать ну и что что летят? Проблема то возникает, когда они летят именно в форму, которую нельзя одновременно двум редактировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2019, 15:59 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
полудухHettapi куда летят несколько тысяч rps от одного клиента это стандартная ситуация для любого сервера надо ситуацию конкретно описывать, а не общими категориями рассуждать ну и что что летят? Проблема то возникает, когда они летят именно в форму, которую нельзя одновременно двум редактировать. Постойкте, какие "формы"... это понятие к HTML относится и бэкэнд может про них ничего не знать. И понятия "редкатировать форму" тоже на бэкэнде не существует. Есть запрос, есть пейлоад и никаких форм. Хватит корчить из себя профи. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2019, 17:36 |
|
Обработка исключений в PHP
|
|||
---|---|---|---|
#18+
"бэкенд" (процессор) вообще ничего не знает, кроме 0/1 хватит корчить из себя демагога. Когда юзер шлёт данные в API, это просто блок данных, который сразу же и пишется. Какие вы там проблемы нашли? Один записал мгновенно, второй в этот момент только собирается слать. Перед отправкой проверяется - не изменились ли данные (если там такая ситуация в принципе возможна). А иначе там нет коллизий в принципе! Мы обсуждаем именно проблему , когда 2 юзера ОДНОВРЕМЕННО залезли редактировать одинаковые данные, и когда один сохраняет, то у другого остаётся форма со старыми данными, которую НЕЛЬЗЯ сохранять в устаревшем виде. Не можете уловить суть, покатились в хамство - классика Ступайте, больше нет желания что-то вам объяснять. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2019, 18:02 |
|
|
start [/forum/topic.php?fid=23&msg=39853658&tid=1459868]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 285ms |
total: | 438ms |
0 / 0 |