Size: a a a

2019 December 17

SK

Simon Khaskelberg in pro.elixir
Но сможешь заглушить
источник

V

V in pro.elixir
В пхп идеальный баланс с одной стороны наличия инструментов по обработке ошибок, с другой - по уёбищности этих инструментов. Этот баланс с одной стороны создаёт иллюзию, что все ошибки можно красиво обработать (а значит нужно это сделать), а с другой - что львиная доля времени программиста уходит на написание этих обработок.
источник

SK

Simon Khaskelberg in pro.elixir
Логичный Лесник
Го принуждает не в плане компилятора, авплане того, что если не обрабатаешь, то потом потратишь дохера времени на поиск этой ошибки. Поэтому лучше обработать по-хорошему. Один раз потратил пару часов на косяк, в следующий раз уже не захочешь этим заниматься.
Да тут даже не в PHP дело. Просто вот эта фраза подойдёт фактически под любой язык программирования
источник

ЛЛ

Логичный Лесник in pro.elixir
Simon Khaskelberg
Мне даже интересно стало, какие ошибки ты не сможешь обработать в PHP
$array = [];

try {
 $item = $array[10];
}
catch(Exception $e) {
   echo 'Message: ' .$e->getMessage();
}

Тут у тебя catch ничего не поймает. И ошибку придётся глушить.
источник

ЛЛ

Логичный Лесник in pro.elixir
V
В пхп идеальный баланс с одной стороны наличия инструментов по обработке ошибок, с другой - по уёбищности этих инструментов. Этот баланс с одной стороны создаёт иллюзию, что все ошибки можно красиво обработать (а значит нужно это сделать), а с другой - что львиная доля времени программиста уходит на написание этих обработок.
Более того, там нужно ошибки обрабатывать как минимум 2-мя способами, а некоторые просто глушить.
источник

ЛЛ

Логичный Лесник in pro.elixir
Не все ошибки ловятся в кетче.
источник

V

V in pro.elixir
Simon Khaskelberg
Да тут даже не в PHP дело. Просто вот эта фраза подойдёт фактически под любой язык программирования
Не всякие ошибку видно сразу просто потому что на этапе проектирования непонятно, ошибка это или нет. Например, не разделил User на Subscriber и Author - получил гемор через полгода-год.
Или ошибка из-за того что расширился диапазон входных данных, а система типов их не вмещает. Например есть входная метрика x типа int. Ты на неё повесил логику. А потом обнаруживается что у неё есть нецелочисленные состояния, и обрабатывать их нужно ортогонально целочисленным. Всё, рефакторинг.
А эксепшны чё там... следи за совпадением входных и выходных типов - и эксепшнов не будет.
источник

SK

Simon Khaskelberg in pro.elixir
Логичный Лесник
$array = [];

try {
 $item = $array[10];
}
catch(Exception $e) {
   echo 'Message: ' .$e->getMessage();
}

Тут у тебя catch ничего не поймает. И ошибку придётся глушить.
Так а в go у тебя просто вылезет паника. И будет примерно то же самое
источник

V

V in pro.elixir
Логичный Лесник
$array = [];

try {
 $item = $array[10];
}
catch(Exception $e) {
   echo 'Message: ' .$e->getMessage();
}

Тут у тебя catch ничего не поймает. И ошибку придётся глушить.
Тут будет нотайс, а не ошибка. При желании можно отлавливать нотайсы и бросать эксепшны.
источник

OJ

O . J in pro.elixir
Simon Khaskelberg
Так а в go у тебя просто вылезет паника. И будет примерно то же самое
Только панику можно перехватить и обработать
источник

OJ

O . J in pro.elixir
Так что не тоже самое
источник

SK

Simon Khaskelberg in pro.elixir
Так и PHP это тоже можно обработать
источник

ЛЛ

Логичный Лесник in pro.elixir
Simon Khaskelberg
Так и PHP это тоже можно обработать
Как перехватить ошибку из примера, что я скидывал выше:
$array = [];

try {
 $item = $array[10];
}
catch(Exception $e) {
   echo 'Message: ' .$e->getMessage();
}
источник

ЛЛ

Логичный Лесник in pro.elixir
O . J
Только панику можно перехватить и обработать
+
источник

SK

Simon Khaskelberg in pro.elixir
Выше же написали - ловишь notice c помощью кастомного error_handler и можешь его превратить в exception
источник

ЛЛ

Логичный Лесник in pro.elixir
Simon Khaskelberg
Выше же написали - ловишь notice c помощью кастомного error_handler и можешь его превратить в exception
А в go функция просто вернёт ошибку.
источник

SK

Simon Khaskelberg in pro.elixir
Например в OutOfRangeException
источник

SK

Simon Khaskelberg in pro.elixir
Ну так получается, что в go тебе нужно написать defer функцию которая выловит панику и обработает ее. В PHP тебе нужно написать error_handler который выловит notice и обработает его
источник

OJ

O . J in pro.elixir
Логичный Лесник
Как перехватить ошибку из примера, что я скидывал выше:
$array = [];

try {
 $item = $array[10];
}
catch(Exception $e) {
   echo 'Message: ' .$e->getMessage();
}
catch (E_NOTICE $e) {}
Можно так
ведь,  без кастомного хендлера ошибок.
источник

SK

Simon Khaskelberg in pro.elixir
Вроде бы так нельзя. На 100% не уверен
источник