@prophp7

Страница 136 из 1387
Aleh
13.12.2016
14:26:13
возможно, ну епта

Sergey
13.12.2016
14:26:38
это лишь пример динамического инстанцирования чего либо
ты путаешь "динамическое инстанцирование" и "динамическую типизацию" походу)

Viktor
13.12.2016
14:26:53
ну ок :) я ретируюсь :)

Sergey
13.12.2016
14:27:04
да, это пересекается, ибо ты не знаешь тип переменной в которую ты инстанцируешь что-то

Google
Artem
13.12.2016
14:27:05
буря в стакане)

Sergey
13.12.2016
14:27:20
но тайп хинтинг тебе тут не поможет никак вообще

и потому тебе надо проверить "а то ли мы получили"

assert($foo instanceof Type);

а ассерты можно будет в продакшене отключить, но ты получишь информацию о типах и все проверки которые надо

Viktor
13.12.2016
14:29:18
именно в пхп тайпхинтинг предотвратит вызов чего-то с аргументом неправильного типа. что позволит избежать какого-то сайдэффекта который мог бы быть без него. но если есть тайпхинты которые уже выполняют проверку - нахрена избавляться от них и навешивать что-то сверху?

Viktor
13.12.2016
14:31:35
либо ты напишешь if (!$foo instanceof Type) throw new Exception(...) либо ты навесишь глобальный обработчик ошибок, который будет все превращать в исключения и будешь просто писать bar($foo) и отлавливать исключение без обвешиваня вызова каждого метода с тайпхинтом дополнительной проверкой типа

Sergey
13.12.2016
14:31:59
ну опять же

я предлагаю возможность опционально отключить тайп хинтинг

ты же можешь отключить ассерты например)

Artem
13.12.2016
14:32:59
Sergey
13.12.2016
14:33:06
в смысле?

Google
Viktor
13.12.2016
14:33:10
ну, лично я считаю это очень рискованным, т.к. нельзя протестировать 146% кода со всеми возможными и невозможными параметрами.

Sergey
13.12.2016
14:33:14
у меня на проде врядли будет такая ошибка

Viktor
13.12.2016
14:33:23
лучше исключение чем сайдэффект

Sergey
13.12.2016
14:33:31
исключение и есть сайд эффект

Aleh
13.12.2016
14:34:47
а вы серьезно try-catch делаете по ошибкам тайпхинта?)

Viktor
13.12.2016
14:34:51
нет, исключение - это исключение. а сайдэффект - это сайдэффект. в исключении у тебя код свалится в место обработки исключений, а в ином случае у тебя к 1 прибавится 1.2, когда требуется int, но он внезапно отключен

Artem
13.12.2016
14:35:10
исключение - это не сайд эффект

Viktor
13.12.2016
14:35:13
отключена проверка типов, я имею ввиду

Sergey
13.12.2016
14:35:40
http://stackoverflow.com/questions/10703232/why-is-the-raising-of-an-exception-a-side-effect

мне лень писать потому ссылочка

Artem
13.12.2016
14:36:52
ок

Yaroslav
13.12.2016
14:37:14
простите, я в этот чат писал что WP это норма?

Artem
13.12.2016
14:37:28
почитал. всегда думал, что сайд эффект (из фп) - это когда изменяешь состояние - пишешь в бд, на экран и т.д.

Viktor
13.12.2016
14:37:40
то что всё должно быть покрыто (и покрыто уже) тестами - это понятно. но к примеру есть какойнить метод вида getRandomInt(int $from, int $to), который должен возвращать int. вы его протестили, всё отлично, но... в рантайме туда может прилететь какойнить float или boolean :)

не думаю что все возможные кейсы покрыты тестами :)

Sergey
13.12.2016
14:38:28
почитал. всегда думал, что сайд эффект (из фп) - это когда изменяешь состояние - пишешь в бд, на экран и т.д.
сайд эффект это ЛЮБОЕ влияние внешнего мира (а вызываемый код - это внешний мир по отношению к коду, который вызывает функцию) на ход работы кода

тогда должно быть исключение
оно просто скажет тебе что все плохо. Ты и так и так узнал бы что все плохо

Google
Sergey
13.12.2016
14:39:09
причем когда у тебя отработает тайп хинт - не факт что оно проигралось радяшком

скорее всего контроль за типами был потерян где-то далеко в цепочке вызовов

Viktor
13.12.2016
14:39:33
оно просто скажет тебе что все плохо. Ты и так и так узнал бы что все плохо
если отключить проверку типов - хер он че тебе скажет. пхп скастует в подходящий тип входящий параметр и скажет что всё ок :)

Viktor
13.12.2016
14:42:43
и в итоге у нас остается три варианта: 1) не трогать тайпхинт и пусть пшп сам проверяет параметры 2) оборачивать все в instancof/is_integer/is_object/is_something 3) забить хер на всё и надеяться на авось первый вариант отличный, второй добавит кучу лишнего кода, третий вообще говно

Sergey
13.12.2016
14:42:55
блин

Viktor
13.12.2016
14:42:57
ну ты получишь флоат на выходе, ну ок
а у тебя метод говорит что он вернет int :)

Sergey
13.12.2016
14:43:00
ты не понял видимо мотивацию "отключения"

тайп хинтинг всего и вся существенно влияет на рантайм

и его производительность

Viktor
13.12.2016
14:43:12
я понял мотивацию

Sergey
13.12.2016
14:43:19
причем если у тебя все покрыто информацией о типах

то тебе в целом не нужен этот самый тайп хинтинг в рантайме

Viktor
13.12.2016
14:43:29
но пшп - это пшп! там в рантайме может случиться любое говно

Sergey
13.12.2016
14:43:36
можно отключить автоматический каст типов в рантайме

о

идея

для кода который под strict_types

Google
Sergey
13.12.2016
14:43:57
отключать касты и рантайм проверки типов

и тогда все вроде счастливы, нет?

в переменной инт а ты пытаешься к нему строку приложений - касты запрещены - все проигрывает

Viktor
13.12.2016
14:44:34
неа, т.к. оно все равно в рантайме проверяет соответствие типов

Sergey
13.12.2016
14:44:35
а вот код который с weak type

там оставить как есть

Viktor
13.12.2016
14:45:52
ладно, пойду спать, а то уже внезапно глубокая ночь... а вот был бы тайпхинт на это - было бы исключение)))

Artem
13.12.2016
14:52:12
спасибо за идея отключать тайп хинтинг в проде

Admin
ERROR: S client not available

Artem
13.12.2016
14:53:09
после сфинкса эластика кажется медленной (индексация)

но удобной из-за нормальных дельта индексов

т.е. можно даже не знать что такое дельта индексы

Sergey
13.12.2016
14:54:18
поиск шустрый, а это главное

ну и индексация ж не нужна полная постоянно

Alex
13.12.2016
14:58:26
Индексация не полная, а при импорте данных. Из-за чего распределение нагрузки не равномерное.

Читал что сорл плох в во время конкурентного обновления индексов.

http://blog.socialcast.com/realtime-search-solr-vs-elasticsearch/

Sergey
13.12.2016
15:05:19
solr ведь поверх lucene, как и эластик

Google
Alex
13.12.2016
15:08:17
И статейка то 5-ти летней давности...

Artem
13.12.2016
15:19:05
а вот код который с weak type
не все обсуждение выше читал, но интересен личный опыт. вы не испоользуете тайп хинтинг и все чекаете через assert и отключаете это в проде?

Aleh
13.12.2016
15:22:05
не, все пользуются тайпхинтами)

Artem
13.12.2016
15:22:36
ок, а то выглядит как 80lvl оптимизации)

Sergey
13.12.2016
15:22:41
я предлагал дать возможность выключать его влияние на рантайм

опциональную

с кучей красных предупржденией "сначала 10 раз подумай сынок"

что бы можно было написать

class Foo { public string $email; public string $password; public string $name; public \DateTime $birthDay; public ?string $aboutMe; }

и статический анализатор бы проверил что мэппинги эти правила осблюдают

и те оверхэды которые налагает реализация тайпхинтинга для пропертей невилировались на продакшене

Artem
13.12.2016
15:27:12
статический анализатор - это что-то вроде phan'а?

Sergey
13.12.2016
15:28:05
да

Artem
13.12.2016
15:28:30
ок! спасибо за подробное объяснение ?

Alexander
13.12.2016
16:10:03
$items = $this->repository->findAll(); foreach ($items as $item) { $item->setFoo('foo'); } $items = $this->repository->findAll(); foreach ($items as $item) { $item->setBar('bar'); } $this->objectManager->flush();

А подскажите, в доктрине отработают оба цикла? Или второй перезапишет значения первого?

Sergey
13.12.2016
16:11:38
странный вопрос) они оба отработают

после того как они попали в доктрину, они становятся managed by UoW

Alexander
13.12.2016
16:12:15
в плане, второй findAll() вернет объекты, у которых значение foo будет изменено первым циклом?

Sergey
13.12.2016
16:12:28
и даже если заново запросишь с базы, все равно будет юзаться версия из UoW

Alexander
13.12.2016
16:12:36
ага, спасибо

Страница 136 из 1387