
Sergey
20.12.2017
11:11:47
заодно в голове приберешься
можешь рандом юзать
вместо конкретных значений
ну короч, за тебя никто работу деать не будет)

Google

Влад
20.12.2017
11:15:01
Да ну это понятно) Я бы тоже не стал за кого-то чужую работу делать)
https://tproger.ru/problems/design-an-algorithm-to-find-all-pairs-of-integers-within-an-array-which-sum-to-a-specified-value/
Такое подойдёт для моей задачи?

Sergey
20.12.2017
11:28:34
@Enleur
class Site {
public $name;
public $url;
}
$site = Site{"name": "Reddit", "url": "https://reddit.com/"};
как тебе такая наркомания?)
MorrisonLevi хочет запилить

Dmitry
20.12.2017
12:12:50
в пхп?

Андрэ
20.12.2017
12:20:07
Судя по $site, да
Но зачем. Экономить на конструкторах с инициализацией? надо ж както указать будет поля, которые нельзя прокинуть так

Sergey
20.12.2017
12:23:59

Dmitry
20.12.2017
12:24:08
вот такое было https://wiki.php.net/rfc/automatic_property_initialization, но задеклайнили

Bohdan
20.12.2017
12:28:44
таки наркомания
пхп это вам не жс

Google

Sergey
20.12.2017
12:31:02

Dmitry
20.12.2017
12:31:37
кривой синтаксис все-равно

Bohdan
20.12.2017
12:32:07
ты про мой вариант? или то, что Сергей писал выше?

Dmitry
20.12.2017
12:32:09
скорее уж тайпкаст разрешить во все классы
(Site)$array типа
я про {}

Bohdan
20.12.2017
12:35:03
да, это криво
еще и со строчными ключами - выглядит отстойно

Maksim
20.12.2017
12:53:07
а смысл в чём? чем это лучше обычного/именованного конструктора?
тем, что самому присваивать не надо?)

Sergey
20.12.2017
12:54:02

Maksim
20.12.2017
12:54:10
ну такое себе

Sergey
20.12.2017
12:54:25
это аля дата классы в котлине, только php-way
я вот думаю в январе таки заняться исследованием php internals и повоять какого сахара
аля
public function __construct(
private EntityManager $em
) {}
ибо дико не хватает после всяких там тайпскриптов или котлинов

Bohdan
20.12.2017
12:56:03
я понимаю, что это "аля"
но тем не менее не оч
непонятно, что будет происходить
или именно как дата классы эти (как раз смотрю)?

Google

Sergey
20.12.2017
12:56:50
непонятно, что будет происходить
в смысле непонятно? это равносильно следующему:
private $em;
public function __construct(EntityManager $em) {
$this->em = $em;
}

Bohdan
20.12.2017
12:57:06
чтобы и сразу объявить сущность, и привязать ее...

Sergey
20.12.2017
12:57:31
типа того, сильно упрощает код на самом деле, особенно учитывая что у тебя большая часть классов это содержит
по сути все сервисы

Bohdan
20.12.2017
12:58:19
да, упрощает
мне не нравится оно семантически
чисто с точки зрения формулировок
получается, что метод __construct (который, как ожидается, должен отвечать за конструирование класса) определяет его содержимое
тут как вариант сделать дефолт конструктор
который берет все приватные поля в том порядке, в котором описаны

Sergey
20.12.2017
12:59:40

Bohdan
20.12.2017
12:59:46
и принимает в себя

Sergey
20.12.2017
12:59:48
с точки зрения клиентского кода сигнатура не меняется
порядок объявления полей не должен влиять на порядок аргументов

Bohdan
20.12.2017
13:01:32
код для клиента - тоже аргумент
насчет неявности - тут уже надо держать баланс

Sergey
20.12.2017
13:01:45
либо я не понял что ты имеешь ввиду

Bohdan
20.12.2017
13:01:57
ты понял правильно

Sergey
20.12.2017
13:02:14
я предлагаю вместо private $em и $this->em = $em просто заюзать в аргументе ключевое слово public/private/protected;

Bohdan
20.12.2017
13:02:45
получится динамическое объявление на стероидах

Sergey
20.12.2017
13:03:10
private $authData;
public function __construct(
private SomeService $service,
$someToken,
$someOtherThing
) {
$this->authData = sha1($someToken.someOtherThing);
}

Bohdan
20.12.2017
13:03:13
не могу сказать, что это плохо

Sergey
20.12.2017
13:04:27
а то что предлагает Морисон Леви, это упростит работу со структурами данных и позволит их делать больше и более структурированными, менее чувствительными к изменениям...

Google

Dmitry
20.12.2017
13:08:36
ничего не упростит, кто делал DTO с конструктором - тот и будет делать, а кто не делал - и не будет

Sergey
20.12.2017
13:09:22

Dmitry
20.12.2017
13:09:32
ну да

Sergey
20.12.2017
13:09:39
а ты я смотрю консерватор
я лично рассмотрю хотя бы такой вариант)

Dmitry
20.12.2017
13:09:51
нет, я в детсвте магии наелся

Sergey
20.12.2017
13:09:59
где ты тут магию увидел?
или что-то неявное
с такой логикой оператор присвоения и мутация стэйта уже должна становиться для тебя магией

Bohdan
20.12.2017
13:10:28
мне в версии Леви не нравятся строчные ключи

Admin
ERROR: S client not available

Bohdan
20.12.2017
13:10:31
это вроде и логично

Dmitry
20.12.2017
13:10:34
ну сахар, ок
сахара я еще больше наелся, 7 лет на перле ;)

Sergey
20.12.2017
13:11:01
я тоже понимаю что мне IDE все за меня сделает, и местами во всех вызовах аргументы поменяет и поле добавит
но блин, удобненько ж

Bohdan
20.12.2017
13:11:29
но лично у меня строки - это либо строки, либо ключи для массивов
использовать их еще где-то не люблю
как минимум - отсутствие автокомплита нормального

Sergey
20.12.2017
13:11:55

Maksim
20.12.2017
13:12:06
я дно и пишу дтошки с конструкторами, приватными свойствами и геттерами и мне хорошо :(
в задницу магию, публичные свойства и т.д.)

Google

Sergey
20.12.2017
13:12:07
в этом конкретном случае все будет работать

Роман
20.12.2017
13:12:25
https://regex101.com/r/qbwBq9/1/
как взять два id если одно в кавичках , а другое без?

Bohdan
20.12.2017
13:12:46
это уже становится точка разветвления
то есть тут у нас строка это строка, а тут у нас строка определяет поле, которое хотим заполнить, да еще и идешка предлагает эти самые поля

Dmitry
20.12.2017
13:12:49
лучше уж именованные аргументы ввели, и то больше толку ;)

Maksim
20.12.2017
13:12:49

Sergey
20.12.2017
13:12:50

Maksim
20.12.2017
13:13:06

Bohdan
20.12.2017
13:13:07

Dmitry
20.12.2017
13:13:09
но их зарезали, вроде...

Sergey
20.12.2017
13:13:22

Bohdan
20.12.2017
13:13:30
мне они не нравятся в питоне только из-за отсутствия автокомплита

Sergey
20.12.2017
13:13:34
они будут подталкивать людей к тому что бы увеличивать количество аргументов

Bohdan
20.12.2017
13:13:37
адекватного, по крайней мере

Sergey
20.12.2017
13:13:49

Bohdan
20.12.2017
13:13:51
(да, я ide-обезьянка, без автокомплита жить не хочу)

Dmitry
20.12.2017
13:13:59
т.е. массив в инициализацию паблик свойств - норм, а массив в конструктор подать - не оч? ;)

Bohdan
20.12.2017
13:14:26

Sergey
20.12.2017
13:14:48
никакой магии и все явно
и все хорошо поддается статическому анализу
а конструктор который массивчик принимает - прощай информация о типах

Dmitry
20.12.2017
13:15:23
тогда вообще от конструктора отличия не вижу