@prophp7

Страница 1080 из 1387
Asset
18.05.2018
13:05:23
Народ, это нормальная практика передавать $this в конструктор другого класа?

public function __construct($item) { $something = new BaseItem($item,$this); }

Виктор
18.05.2018
13:07:44
Для какой нибудь стратегии, да. Обращение к контексту

Sergey
18.05.2018
13:24:44
Народ, это нормальная практика передавать $this в конструктор другого класа?
и да и нет. Да потому что "ну а че нет", и нет если у тебя образуется циклическая ссылка. Последнее намекает что что-то пошло не так но увы и ах иногда надо

Google
Asset
18.05.2018
13:26:25
есть еще варианты доступа к вызывающему объекту

Sergey
18.05.2018
13:28:28
есть еще варианты доступа к вызывающему объекту
это и есть циклическая зависимость между двумя хреновинами. Это не есть хорошо с точки зрения декомпозиции, но (привет, доктрина) иногда ты ограничен возможностями библиотек

Alexander
18.05.2018
13:30:47
я иногда встречал такое: public function __construct($item) { $something = new BaseItem($item,[$this, 'methodName']); } или такое: public function __construct($item) { $something = new BaseItem($item, function($param) { return $this->methodName($param); }); }

Sergey
18.05.2018
13:35:35
я иногда встречал такое: public function __construct($item) { $something = new BaseItem($item,[$this, 'methodName']); } или такое: public function __construct($item) { $something = new BaseItem($item, function($param) { return $this->methodName($param); }); }
тут нет передачи самого $this, это передача функции которая как раз таки разрывает эту самую циклическую зависимость.

Чем это чревато?
тем что у тебя как бы модуля два.... но как бы он один)

а дальше вопрос где ты границы провел между модулями. Это могут быть маленькие штуки а могут быть весьма жирные)

Asset
18.05.2018
13:37:29
думаю в моем случае ничего страшного не произойдет)

Alexander
18.05.2018
13:37:40
сильная связность крч

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

Sergey
18.05.2018
13:41:04
думаю в моем случае ничего страшного не произойдет)
тут чуть-чуть, там чуть-чуть и вот у нас среднестатистическое легаси с высокой связанностью))) но если тебе не больно то ничего страшного

Asset
18.05.2018
13:42:03
Ну у меня дерево, и мне крайне необходимо иметь доступ к родителю, чтобы менять в дочерних классах свойства родителя

Google
Sergey
18.05.2018
13:42:38
но с какого перепуга дети меняют родителя?

ну и опять же - структуры данных, типа двусторонних списков это отдельная история

Asset
18.05.2018
13:44:23
есть кароче сетка, в сетке есть ряды, в рядах есть колонны, в колоннах есть предметы, и в зависимости от предмета и его свойств, надо менять свойство ряда

Alexander
18.05.2018
13:45:16
я бы постарался как-то решить этот вопрос вне предмета

Alexander
18.05.2018
13:45:38
кто-то внешний прошелся бы по ряду и посмотрел предметы и выставил для ряда свойства

Sergey
18.05.2018
13:46:02
кто-то внешний прошелся бы по ряду и посмотрел предметы и выставил для ряда свойства
ну это не очень похоже на ооп но да можно и так) но тогда у тебя будет кто-то сверху кто вообще все знает

что хуже для связанности)

Asset
18.05.2018
13:46:21
кто знает о том какие у ряда свойства?
ну сам ряд и все его дети :D

Alexander
18.05.2018
13:46:37
ну это не очень похоже на ооп но да можно и так) но тогда у тебя будет кто-то сверху кто вообще все знает
ну этим "кто-то сверху" может выступать и сам ряд, ну или сервис, которому это всё нужно в итоге

Alexander
18.05.2018
13:47:45
притом можно по цепочке передавать ответственность: колонна знает о предметах, ряд о колоннах

Asset
18.05.2018
13:48:04
Я пишу сетку для верстки)

Sergey
18.05.2018
13:48:55
Я пишу сетку для верстки)
ммм.... опиши еще раз суть задачи)

Виктор
18.05.2018
13:49:04
ООП головного мозга?

Sergey
18.05.2018
13:49:08
типа эмулируешь flexbox?)

или css-grid?

ООП головного мозга?
процедурщина головного мозга?

Я пишу сетку для верстки)
ну просто реально заинтриговал)

Asset
18.05.2018
13:50:58
задача такая Есть в определенном ряду, в определенной колонне изображение, по умолчанию ряд по ширине контейнера(1600px) но если у изображения есть свойство типа $this->width = 'full' то и ряд тоже должен стать full

Google
Asset
18.05.2018
13:51:00
примерно так

Sergey
18.05.2018
13:51:33
казалось бы что тут нельзя сделать через css))

Asset
18.05.2018
13:51:43
нельзя)

нужно изначально определить для ряда класс

Asset
18.05.2018
13:52:16
обычный ли он или 100%

Sergey
18.05.2018
13:52:27
не надо просто разделять на ряды)

Asset
18.05.2018
13:52:51
верстка это отдельная история, это же все же чатик про php)

есть контейнер, и есть сетка, и один блок выходит за пределы сетки



вопрос по front я уже задавал в чате фронтендеров)

Alexander
18.05.2018
13:54:46
class Row { public function isFullWidth() { foreach ($this->cols as $col) { if($col->isFullWidth()) { return true; } } return false; } } class Col { public function isFullWidth() { foreach ($this->items as $item) { if($item->isFullWidth()) { return true; } } return false; } }

Asset
18.05.2018
13:56:06
да, типа такого
такой способ просто увеличит кол-во строк в классе, т.к. свойств может быть просто огромное кол-во

Sergey
18.05.2018
13:57:36
Asset
18.05.2018
13:57:47
а со ссылкой на родителя будет только class Text { public function isFullWidth() { if($this->width == 'full'){ $this->row = 'full'; } } }

Sergey
18.05.2018
13:57:48
но в любом случае из чайлда доступа к паренту быть не должно

Sergey
18.05.2018
13:58:17
объективное

Google
Sergey
18.05.2018
13:58:34
вместо isFullWidth ты можешь спросить конкретное свойство из детей и там например сумму свойст

Alexander
18.05.2018
13:58:36
ну, там, инкапсуляция, все дела...

чайлд будет знать очень много, тестировать его будет уже таким себе занятием...

Asset
18.05.2018
13:59:55
вместо isFullWidth ты можешь спросить конкретное свойство из детей и там например сумму свойст
я не могу знать что у меня за дети и какие свойства у них есть

Sergey
18.05.2018
14:00:35
я не могу знать что у меня за дети и какие свойства у них есть
ну короч если тебе сделать и выкинуть - делай как хочешь) если надо гибко - надо думать)

Alexander
18.05.2018
14:00:50
но ты можешь знать какие свойства нужны от детей строке)

и их требовать в интерфейсе

Asset
18.05.2018
14:01:58
В общем дети крайне сильно зависимы от родителя и не могут существовать без родителя как отдельная сущность)

Admin
ERROR: S client not available

Alexander
18.05.2018
14:02:33
тогда это больные дети, либо еще недоразвиты)

Alexander
18.05.2018
14:03:02
а потом с развитием придется придумывать как же их выселить)

Sergey
18.05.2018
14:03:07
короч похеру, мне лень объяснять что есть масса вариантов разделить нормально эту логику

Asset
18.05.2018
14:03:24
Мда)

Sergey
18.05.2018
14:03:26
судя по картинке - это проект одноразовый

так что пофигу

Asset
18.05.2018
14:03:42
Ну как одноразовый)

Sergey
18.05.2018
14:03:49
но можешь попробовать сам придумать как перераспределить логику так что бы все друг о друге знали минимум

Asset
18.05.2018
14:03:58
это для создания динамической сетки

Google
Alexander
18.05.2018
14:04:13
ну я даже в одноразовых проектах стараюсь)

Asset
18.05.2018
14:04:28
он будет использоваться каждый день)

много раз)

Alexander
18.05.2018
14:05:02
он будет использоваться каждый день)
под одноразовым подразумевается "написано однажды, не дорабатывается никогда"

Sergey
18.05.2018
14:05:11
он будет использоваться каждый день)
это не важно, важно насколько часто будет меняться

Alexander
18.05.2018
14:05:12
эдакий Append Only код

Asset
18.05.2018
14:05:26
под одноразовым подразумевается "написано однажды, не дорабатывается никогда"
ну он достаточно универсален, какой смысл его менять :D

Sergey
18.05.2018
14:05:31
повторюсь - мы полностью задачу не знаем, может быть твой вариант наиболее логичен

(хотя скорее всего нет))

Alexander
18.05.2018
14:05:58
Sergey
18.05.2018
14:06:14
Asset
18.05.2018
14:06:50
Alexander
18.05.2018
14:10:40
пример с кодом тут и не поможет: если суть задачи — написать, запустить и забыть, то можно хоть процедурно в одном PHP-файле всё написать, а если нужно поддерживать, то надо будет подумать о том, насколько больно будет это делать

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

Alexander
18.05.2018
14:13:58
всеравно будет гореть
разница в интенсивности горения: может просто подгорать, а может сжечь уже десятое кресло)

Asset
18.05.2018
14:14:35
Ну я сильно сомневаюсь что структура сетки для верстки поменяется, и ряды с колонками будут еще долго)

Alexander
18.05.2018
14:14:35
а в некоторых случаях может начаться ректальная реактивная тяга

ну иногда бывает, когда прилетает откуда не ждали)

Jack
18.05.2018
15:25:14
привет. Как бы вы зашили в коде к примеру идентификаторы пола? У нас есть цифровое представление - (0,1,2,3) и текстовое (male, female, trans... - оно как слаг в фильтре) ?

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