
Nurik
15.08.2018
16:11:03

Dmitry
15.08.2018
16:11:32

Nurik
15.08.2018
16:11:58

Dmitry
15.08.2018
16:12:02
или что под "дистра(ой)" имелось в виду?)

Google

Nurik
15.08.2018
16:12:18
Со своим пакетным менеджером.

Dmitry
15.08.2018
16:12:43
https://www.ubuntu.com/download ?
например как этот?

Vitaly
15.08.2018
16:13:08

Dmitry
15.08.2018
16:13:11
в нем apt менеджер есть

Nurik
15.08.2018
16:14:09

Vitaly
15.08.2018
16:14:45
В таких ситуациях, в большинстве случаев помогает гугл, если в иксах не полный ноль.

Dmitry
15.08.2018
16:16:12
вообще имхо самому себе локально надо уметь окружение развернуть для работы. На серверах и сервисах это уже больше имхо девопс задача крутить, но иногда все равно опять же приходится. Но где-то это может входить в обязанности
т.е. тут имхо больше про наличие опыта, потому как иногда не все как в мануале идет :)

Nurik
15.08.2018
17:17:47

Google

Nurik
15.08.2018
17:26:36

Andrew
15.08.2018
18:20:59
Вечер добрый, скажите пожалуйста ,как задокументировать, что то динамическое выкидывает ексепшен внутри метода?
/** @throws AssertionFailedException */
$this->commandBus->dispatch(
Так как команды разные, то и ексепшены внутри их могут быть разные, однако рнрstorm не видит этого и при попытке поймать ексепшен говорит что
Exception 'AssertionFailedException' is never thrown in the corresponding try block less... (Ctrl+F1 Alt+T)
The inspection reports catch clauses with exceptions which are never thrown from the corresponding try block.

Ринат
15.08.2018
18:22:51


Andrew
15.08.2018
18:24:22
В данном пакете есть магия
protected static function createException($value, $message, $code, $propertyPath = null, array $constraints = array())
{
$exceptionClass = static::$exceptionClass;
return new $exceptionClass($message, $code, $propertyPath, $value, $constraints);
}
Хотя вот нашел родительский
Ексепшен
class InvalidArgumentException extends \InvalidArgumentException implements AssertionFailedException
Он уже казан в док блоке выше к методу
* @throws \Assert\InvalidArgumentException
И все равно рнрstorm говорит что ексепшен AssertionFailedException нигде не создан.
* @throws \InvalidArgumentException
тоже не работает

Evgeniy
16.08.2018
05:25:14
и рядом написать в каких случаях вылетит
или писать \Throwable


Kirill
16.08.2018
09:36:27
Ну, раз уж пошла пляска про исключения - какие exception вы документируете в докблоках? Все? Как насчет Runtime исключений? Logic исключений?
Видел мнение, что, так как Logic исключения - это ошибка в самом коде, какая-то в недоработка в логике, их нужно по-тихому залогировать, но не документировать, так как они не являются частью ожидаемого потока выполнения программы.
То есть если существуют какие-то недоработки в коде, то их нужно залогировать и исправить, а не документировать

Evgeniy
16.08.2018
09:58:10
по работе с исключениями не плохо в java принято
есть 2 типа исключений отлавливаемые и нет (типо рантайм)
так вот за теми которые надо отлавливать прямо компилятор следит но компилятора в пхп нет поэтому тут карта ляжет

Google

Evgeniy
16.08.2018
10:10:43
или например FileNotFoundException extends InvalidArgumentException ведь о наличие или отсутсвия файла можно узнать в рантайме
потому что под файлом понимается обычная строка
но при этом это все от LogicException идет


Kirill
16.08.2018
10:25:47
Очевидно, FileNotFoundException не должен экстендить InvalidArgumentException. Далее - если InvalidArgumentException extends LogicException , то его тоже логировать не стоит.
Далее - если же речь идет о несоответствии значений чего-либо ожидаемому, стоит использовать UnexpectedValueException extends RuntimeException
Пример из документации PHP http://php.net/manual/en/class.invalidargumentexception.php - The InvalidArgumentException class. Exception thrown if an argument is not of the expected type.
Если мы ожидаем аргумент одного типа (речь необязательно о встроенном типе данных), а приходит другой - это ошибка логики программы. Мы её по-тихому логируем и исправляем, это не должна быть часть обычного потока выполнения, который мы должны документировать.
http://php.net/manual/en/class.unexpectedvalueexception.php
Exception thrown if a value does not match with a set of values. Typically this happens when a function calls another function and expects the return value to be of a certain type or value not including arithmetic or buffer related errors.
То есть проблема уже не с типом, а со значением. Это рантайм ошибка, её появление является частью логики программы. Логируем, возможно, возвращаем посетителю, документируем в докблоке.
В чем я неправ?


Evgeniy
16.08.2018
10:27:11
Очевидно, FileNotFoundException не должен экстендить InvalidArgumentException. Далее - если InvalidArgumentException extends LogicException , то его тоже логировать не стоит.
Далее - если же речь идет о несоответствии значений чего-либо ожидаемому, стоит использовать UnexpectedValueException extends RuntimeException
Пример из документации PHP http://php.net/manual/en/class.invalidargumentexception.php - The InvalidArgumentException class. Exception thrown if an argument is not of the expected type.
Если мы ожидаем аргумент одного типа (речь необязательно о встроенном типе данных), а приходит другой - это ошибка логики программы. Мы её по-тихому логируем и исправляем, это не должна быть часть обычного потока выполнения, который мы должны документировать.
http://php.net/manual/en/class.unexpectedvalueexception.php
Exception thrown if a value does not match with a set of values. Typically this happens when a function calls another function and expects the return value to be of a certain type or value not including arithmetic or buffer related errors.
То есть проблема уже не с типом, а со значением. Это рантайм ошибка, её появление является частью логики программы. Логируем, возможно, возвращаем посетителю, документируем в докблоке.
В чем я неправ?
FileNotFound это опять же пример если мы ожидаем аргумент string пришел string но в текущем окружение этого файла нет или прав недостаточно на его чтение это FileNotFoundException
ок ненаследуемся мы от InvalidArgumentException то в каких случаях он будет вообще вылетать ? https://3v4l.org/Jrv78 тут TypeError а не InvalidArgumentException, в каком случае по вашим словам должен возникать InvalidArgumentException ?
"это не должна быть часть обычного потока выполнения" исключение это как раз таки способ сообщить что то внезапно не так и мы не знаем как с этим поступить, а вот как обрабатывать каждое исключение вопрос открытый и сильно зависит от конкретной ситуации


Kirill
16.08.2018
10:31:20
Файла может не быть по 1000 причин. Не все из них - ошибка логики программы.
Я выше упомянул, что InvalidArgumentException это совсем не обязательно про встроенные типы данных.
Например проверка на instanceof выдала неожиданный результат, но мы не можем проверить значение декларацией типов...

Evgeniy
16.08.2018
10:32:39
так если ты делаешь проверку в коде программы на типы значит ты ожидаешь что сюда может придти посторонее так и обработать это надо там
если ты проверил все возможные типы а там что то посторонее и кидать InvalidArgumentException ну ок, но это опять же частности

Kirill
16.08.2018
10:34:03
У вас есть универсальный гидратор. Ожидаемый тип объекта задается динамически. Значит, декларацией типов значения не проверить. Как такой вариант применения для InvalidArgumentException?

Evgeniy
16.08.2018
10:34:50
вот пример InvalidArgumentException о котором вы говорите, но его описывают в Throws https://github.com/PHP-DI/PHP-DI/blob/master/src/Container.php#L121
а вот исключения возникающие в Runtime да возможно стоит делать как в java и не описывать
я все таки в этом вопросе склонен довериться опыту java потому что это тонка грань
это чисто мое имхо, а LogicException мне кажется стоит описывать в блоке throws и писать что именно не так как в ссылке с примером.
и возможно даже phpstorm не просит вылавливать или документировать RuntimeException (доп ургумент)
а раз так делают большинство, то код будет более привычен большинству

Kirill
16.08.2018
10:42:30

Evgeniy
16.08.2018
10:44:23
ну тут описание вполне божественно http://php.net/manual/en/class.unexpectedvalueexception.php
это когда вызвал другую функцию а она вернуло что то внезапно другое)))

Kirill
16.08.2018
10:44:30

Sergey
16.08.2018
10:44:34

Kirill
16.08.2018
10:45:30

Evgeniy
16.08.2018
10:46:08

Kirill
16.08.2018
10:46:35
https://github.com/symfony/symfony/pull/22231 что об этом скажете?

Evgeniy
16.08.2018
10:46:45
поэтому там начинают делить с обрабатываемых и нет и на уровне языка проверяют
https://www.tutorialspoint.com/java/images/exceptions1.jpg

Google

Pavel
16.08.2018
10:47:36
по psr <?= это хорошо или плохо ?
нашел в psr-1 , это н ормально

Kirill
16.08.2018
10:55:01
По ссылке: It's not a lack of interest in a complete contract, it's that it's different contracts for different targets. A \RuntimeException is for the application, which may handle it whereas \LogicException is for you as a developer. Ensuring that you don't get a \LogicException when running your application in production is your responsibility.

Evgeniy
16.08.2018
11:07:49

Kirill
16.08.2018
11:09:37
https://github.com/symfony/symfony/pull/22231#issuecomment-296229530 ссылка на коммент

Evgeniy
16.08.2018
11:19:47
а ну это чьето имхо

Kirill
16.08.2018
11:26:35
а ну это чьето имхо
Любое мнение - это чье-то имхо. Просто к некоторым прислушиваются, они даже чатики в телеграме открывают :D

Nikitcat
16.08.2018
11:28:07
Это субъективное мнение каждого. Имхо для ленивцев

Admin
ERROR: S client not available

Evgeniy
16.08.2018
11:28:51
и я такое пропустил при прочтение

Kirill
16.08.2018
12:09:08
Котаны. А подкиньте плиз ссылочки на либы для промизов.
Что я вообще нашёл:
1) React - тру, но есть баги, не прокидываются исключения наружу (https://github.com/reactphp/promise/issues/128)
2) Amp - монстр.
3) Kraken - мёртвый
4) Guzzle - пока единственный вариант походу. Сейчас буду на посмотреть.
Мб ещё есть что?
с газзлом такая же фигня
=\
мб это я дурак?
Пишу:
$p = new Promise();
$p->then(function($v) {
throw new \Exception('Example');
});
$p->resolve(23);
И необработанное исключение тупо гасится, а не прокидывается наверх

Herman
16.08.2018
12:22:46
Я думаю что их нужно отлавливать на otherwise
https://github.com/reactphp/promise#promiseinterfaceotherwise

Kirill
16.08.2018
12:23:28
@ball00n можно
но я не могу
точнее не так, у меня один обработчик исключений

Google

Kirill
16.08.2018
12:24:06
и для каждого промиза его присобачивать - проще убиться

Herman
16.08.2018
12:24:50
промисы чейнится должны вроде бы

Kirill
16.08.2018
12:24:59
спросил у наших фронтэндеров, говорят "да", исключение, если его никто не словил овервайзом - должно прокидываться наверх
т.е. и в реакте, и в газзле баги
да и если посмотреть, то там код внутренний почти идентичный

Herman
16.08.2018
12:25:58
я думаю что ты просто неправильно используешь библиотеку и не понимаешь промисов

Kirill
16.08.2018
12:26:39
ну напиши в консольке
let p = new Promise((c) => {
setTimeout(() => c(), 1000);
});
p.then(() => { throw new Error(); });
увидишь исключение
а теперь на газельке
$p = new Promise();
$p->then(function(): void {
throw new \Exception('Example');
});
$p->resolve(23);
консоль пустая
пример с реактом выше по ссылке в иссью
ну т.е. тут не в неправильности использования, а в том, что реализация некорректная

Herman
16.08.2018
12:28:44
чейни промисы и все будет ок

Kirill
16.08.2018
12:28:56
да не могу я чейнить же
ну т.е. могу, конечно

Sergey
16.08.2018
12:29:47

Kirill
16.08.2018
12:29:49
но код превратится в люты треш

Sergey
16.08.2018
12:30:01

Kirill
16.08.2018
12:30:08
@fes0r если не делать кетч, то оно рендерится)