«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/09/08 23:05:02  №2153439 1
Изучая MVC встал вопрос, как реализовывать классы для роботы с БД и роутером? Видел разные реализации, в одних объекты таких классов не создаются и просто вызываются статические методы, в других же создается объект и вызывают его методы. Разница не так велика, однако что лучше в данных случаях? И в подобных ситуациях, когда у какого-то объекта есть всего один экземпляр(типо того же роутера или бд), как поступать?
Ответы: >>2154190
Аноним 2021/09/09 22:06:28  №2154190 2
>>2153439

Статические методы в таких случаях это плохо, почему, я объясняю в уроке по DI: https://github.com/codedokode/pasta/blob/master/arch/di.md

Если кратко:

- статические свойства "отравляют" код и вынуждают делать его весь в таком стиле. Например, ты сделал класс для работы с БД на статических методах. А ему нужно где-то брать конфиг, получается придется и класс конфига сделать на статических методах
- при использовании статических методов нельзя создать 2 объекта с немного разными настройками. Например, нельзя создать 2 объекта для работы с двумя БД. Или два соединения с одной БД. Это мешает при тестировании. В тестах мы хотим создать объект, попользоваться им и выкинуть, чтобы после этого не осталось никаких следов. У тебя же после теста в классе остается состояние в статических полях и оно может повлиять на другие тесты.
- при использовании статических методов нельзя заменять зависимости. Например, нельзя сделать второй класс работы с БД и подсунуть его вместо основного, так как в коде жестко прописано его имя. Это мешает делать подмену в тестах, а также при использовании сторонних библиотек. Нельзя заменить роутер на другой (например, с функциями отладки).
- вместо того, чтобы получать настройки через конструктор, класс со статическими методами сам их откуда-то берет. Это делает код менее логичным и понятным.

То, что в твоем случае тебе нужен лишь один экземпляр класса - это не повод использовать статические методы или синглтоны. Нужен один экземпляр - создай его с помощью new и используй.
Ответы: >>2154242
Аноним 2021/09/10 05:51:47  №2154242 3
>>2154190
>Нужен один экземпляр - создай его с помощью new и используй.

Все это конечно заебись на бумаге. Но в случае конекшена к базе именно что НЕЛЬЗЯ давать возможность создать несколько коннекшенов. И это именно что повод использовать синглтоны и статические методы.
Ответы: >>2154250 >>2154451
Аноним 2021/09/10 06:10:22  №2154250 4
>>2154242
>И это именно что повод использовать синглтоны и статические методы.
Всегда спрашиваю про область применимости синглтонов на собесах и как только слышу подобное - собес провален.
Ответы: >>2154260
Аноним 2021/09/10 06:34:57  №2154260 5
>>2154250
Нихуя ты жесткий. Ну такому жесткому в самый раз бегать с порванной сракой и считать инстансы коннекшенов к базе когда они закончились. Попутно еще вытирать с лица струю мочи от дба, которому ты сказал что тебе нужно только 50.
Ответы: >>2154822
Аноним 2021/09/10 12:39:32  №2154451 6
>>2154195

Во-первых, изменение PATH через настройки компьютера требует перезагрузки, чтобы настройки применились.

Во-вторых, проверь, действительно ли PATH поменялся, командой

echo % %PATH% % (без пробелов между процентами)

>>2154242

Иногда нужен отдельный коннект. Бывает, что баз несколько, например slave/master.

Чтобы не было возможности сделать несколько коннектов, используют DI контейнер и берут соединение из него, а не создают каждый раз вручную с помощью new.

Ответы: >>2154611
Аноним 2021/09/10 16:00:19  №2154611 7
>>2154451
>используют DI контейнер и берут соединение из него, а не создают каждый раз вручную с помощью new
>Нужен один экземпляр - создай его с помощью new и используй.

Мне поебать че там кто берет или не берет. Какие-то гарантии можно получить только если физически невозможно проебать в никуда коннект. Вас кукаретиков за километр видать. Вы просто не понимаете насколько "некрасивый код" мелкая хуйня в сравнении с отвалом базы.
Аноним 2021/09/10 22:10:26  №2154822 8
>>2154260
>бегать с порванной сракой и считать инстансы коннекшенов к базе когда они закончились
Сразу видно дурачка, не умеющего в инъекцию зависимостей. Бегать с порванной сракой будешь ты, когда у тебя случится шардинг, кек.