
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

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);
});
}

Asset
18.05.2018
13:34:49

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

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
Ну у меня дерево, и мне крайне необходимо иметь доступ к родителю, чтобы менять в дочерних классах свойства родителя

Sergey
18.05.2018
13:42:27

Google

Sergey
18.05.2018
13:42:38
но с какого перепуга дети меняют родителя?
ну и опять же - структуры данных, типа двусторонних списков это отдельная история

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

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

Sergey
18.05.2018
13:45:32

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

Sergey
18.05.2018
13:46:02
что хуже для связанности)

Asset
18.05.2018
13:46:21

Alexander
18.05.2018
13:46:37

Sergey
18.05.2018
13:47:43

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
нельзя)
нужно изначально определить для ряда класс

Sergey
18.05.2018
13:52:12

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;
}
}

Sergey
18.05.2018
13:54:49

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
но в любом случае из чайлда доступа к паренту быть не должно

Asset
18.05.2018
13:58:09

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

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
тогда это больные дети, либо еще недоразвиты)

Sergey
18.05.2018
14:02:40

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

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

Sergey
18.05.2018
14:07:19

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

Sergey
18.05.2018
14:13:16

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... - оно как слаг в фильтре) ?