
Ilya
23.11.2016
08:02:26
когда я мог бы просто перегрузить существующую для PostgresQueryBuilder
насчет первой проблемы - это решаемо быстро
меня когда-нибудь это в конец достанет
и я пришлю им пуллреквест

Google

Sergey
23.11.2016
08:03:27
без перугрузки жить можно, но с ней было б лучше

Ilya
23.11.2016
08:03:56
а вот вторая - тут надо уже мозги напрягать, чтобы думать сразу про все в базовом классе, потому что нет перегрузки

Sergey
23.11.2016
08:04:28
именованные конструкторы, разные имена методов типа эмуляции ее(add, addAll, addShit...)

Sergey
23.11.2016
08:04:57

Ilya
23.11.2016
08:05:43
UpdateByIdAndUserId
выглядит глупо

Sergey
23.11.2016
08:09:56
зато читабельно
явно

Ilya
23.11.2016
08:12:31
Обновите телеграм и нажмите instant view по ссылке (пока только на мобилах) http://telegra.ph/%D0%97%D0%B0%D0%B2%D1%82%D1%80%D0%B0%D0%BA%D0%B0%D1%81%D1%82-%D0%B2-%D1%82%D0%B5%D0%BB%D0%B5%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B5-11-23
телеграм свой встроеный медиум запилил

Sergey
23.11.2016
08:17:36
> пришлось добавлять огород с другой функцией
так это и должна быть другая функция, у нее другая семантика, у нее другое поведение

Google


Sergey
23.11.2016
08:18:08
зачем "обобщать" когда тебе наоборот нужно специализированное поведение?
точно так же методы updateByIdAndUserId вполне себе норм штука, просто потому что не надо гадать "по чем оно там что делает"
хотя последнее вопрос спорный, если это много где юзается лучше завернуть в что-то более абстрактное, скрывающее "как оно делается"
но в приведенном тобой примере с дистинктом я вообще не увидел необходимости в перегрузке методов
по поводу конструкторов - статические методы фабрики. Если вариантов слишком много - возможно стоит вообще подумать об отдельной фабрике
с перегрузкой проблема в том, что разработчик не будет ничего знать о контекстах. Максимум если добавить доку в описание метода. А когда у тебя 2 метода с разным поведением имеют два разных названия - это вполне себе норм тема
у меня за последние года два только пару раз была потребность именно в перегрузке методов для упрощения интерфейса, и то это все решилось парочкой ифов. Количество кода даже меньше чем с перегрузкой методов, не вижу смысла париться из-за ифов.
ну то есть перегрузка методов - это те же ифы но на уровне рантайма, неявно


Ilya
23.11.2016
08:25:54
Sergey Protko, [23 Nov 2016, 11:17]:
так это и должна быть другая функция, у нее другая семантика, у нее другое поведение
зачем "обобщать" когда тебе наоборот нужно специализированное поведение...
так это одна и та же функция distinct

Sergey
23.11.2016
08:26:01
и в языке типа php, где проверка вызова происходит тоже в рантайме а не на этапе компиляции - профита от этого ровным счетом ноль

Ilya
23.11.2016
08:26:07
mysql/sqlite не умеет
а постгрес умеет
или тот же drop table cascade

Sergey
23.11.2016
08:26:50
сойдемся на том что eloquent говно, юзайте doctrine)

Ilya
23.11.2016
08:26:53
там разница в запросе в наличии слова cascade
и все
достаточно было бы одну переменную добавить в метод
$cascade = false
дефолтную

Sergey
23.11.2016
08:27:35
так ты можешь добавлять опциональные аргументы

Google

Sergey
23.11.2016
08:27:43
тебе ж никто не мешает

Ilya
23.11.2016
08:28:30
myfunction($value1, $value2)
myfunction($value1, $value2, $value3 = false)
так можно?

undefined
23.11.2016
08:32:18
да

Ilya
23.11.2016
08:34:01
а это с какой версии так можно?

Sergey
23.11.2016
08:34:06
со всех

Ilya
23.11.2016
08:34:08
я чот совсем пропустил этот момент

Sergey
23.11.2016
08:34:19
с версии 5.0 походу
ну или хз, но в 5.3 это точно было
Be conservative in what you send, be liberal in what you accept
есть такой принцип
Robustness principle

Sergey
23.11.2016
08:35:31
он как раз про это
если ты что-то расширяешь, ты можешь ослаблять предусловия, но не должен ослабвлять инварианты и пост условия
когда ты добавляешь опциональный аргумент - ты не меняешь предусловия и остальной код может все так же использовать твои методы
короч если проще - если не ломается обратная совместимость - все ок и можно

Ilya
23.11.2016
08:37:14
и правда работает
class A {
public function myFunc($value1, $value2) {
var_dump($value1);
var_dump($value2);
}
}
class B extends A {
public function myFunc($value1, $value2, ...$value3) {
var_dump($value1);
var_dump($value2);
var_dump($value3);
}
}
$a = new A();
$a->myFunc(2,3);
$b = new B();
$b->myFunc(2,3, 33,442,2323);
даж так не ругается
а я 7 лет думал, что ругаться будет и не делал так

Google

Ilya
23.11.2016
08:39:23
эх

Aleh
23.11.2016
08:40:05
давайте лучше паттерн-матчинг

Fayozjon [CybernatiC]
23.11.2016
08:40:55
Implements же нету чтобы ругаться

Sergey
23.11.2016
08:49:58
у тебя ж интерфейс сохраняется. Он расширяется и позволяет принимать больше

Aleh
23.11.2016
08:50:09
а в чем проблема?

Sergey
23.11.2016
08:50:28
ну короч принцип подстановки Барбары Лискоу сохраняется, а потому все збс

Aleh
23.11.2016
08:50:30
вместо A можно передать B

Sergey
23.11.2016
08:51:03
надо написать статью про LSP

Admin
ERROR: S client not available

Sergey
23.11.2016
08:51:14
ушел писать

Ilya
23.11.2016
09:08:09
почти все
пхп не ругается, шторм ругается
и думаю, линтеры, тоже будут ругаться

Sergey
23.11.2016
09:11:08
ну по сути это бага линтеров, поскольку все должно быть ок
ну мол линтеры просто не понимают что это тоже самое что array $args = []

Fayozjon [CybernatiC]
23.11.2016
09:11:31
Значит надо открыть ишью в них

Sergey
23.11.2016
09:11:46
им надо явно прописать дефолтное значение что бы они не ныли

Fayozjon [CybernatiC]
23.11.2016
09:12:20
Попробовал сделать так же как и выше. Обработка успешная но ide ругается

Sergey
23.11.2016
09:14:41
что я делаю не так?

Google

Sergey
23.11.2016
09:14:51
линтер шторма говорит что я молодец

Fayozjon [CybernatiC]
23.11.2016
09:15:32
Может дело в типе самом?

Sergey
23.11.2016
09:16:03
секу
не
все кейсы работают корректно

Fayozjon [CybernatiC]
23.11.2016
09:18:50
Еще вопрос
На вашем ide возможно обработчик php версии поновее?

Sergey
23.11.2016
09:21:03
эээм в смысле?
php 7.1
какая рахница если это работает с php 5.6
PhpStorm 2016.2.2
Build #PS-162.2380.11, built on October 24, 2016
Licensed to Sergey Protko
Subscription is active until December 20, 2016
JRE: 1.8.0_112-release-287-b3 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
все просто збс

Roman
23.11.2016
15:40:52
Чуваки, можете сказать, какие профиты и грабли я получу с сервис локейтора, либо же депенденси инжекшин, при создании инверсии контроля? Или что мне лучше поможет?
В сервис локейторе я смогу разрулить все через какой-то конфиг, где смогу переопределять, какие классы мне надо будет юзать, и заменять. В депенденси инжекшин, я просто буду закидывать объекты, у которых дожен будет например быть какой-то общий интерфейс.

Ilya
23.11.2016
15:58:12
зависит от того чего тебе нужно
по идеи
например, в Symfony
Service Locator внедряется через DI в приложение
у тебяж в любом случае (а может и не в любом) он должен существовать как объект
мне кажется будет совсем неудобно, если только Service Locator юзать

Sergey
23.11.2016
16:30:15