Как называется этот шаблон проектирования?

StalkerClasses

Новичок
PHP:
// Верхнее меню справа
Menu::make('menu.header.right', function ($menu) {
        $cab = $menu->add('Кабинет');
       
        // в моем понимании вложенное должно быть как в цепочке вызовов $menu->add('Кабинет')->add('Вложенное меню')
        // 1) почему вот это уже пишется как вложенное в переменную $cab а не в $menu?
        $cab->add('Войти', 'login');
        $cab->add('Регистрация', 'register');
        $cab->add('Забыли пароль?', 'password.request');
       
        // 2) возврат насколько понимаю идет по ссылке?
        // Почему не нужно возввращать return?
    }
});
 

StalkerClasses

Новичок
Что такое анонимная функция я понимаю, что такое замыкание и use я также понимаю.

Но не могу понять почему у переменной cab такое поведение? Почему она вставляет данные во внутрь Menü?
 

Тугай

Новичок
это фабрика, можно было написать и так
Код:
$menu = Menu::make('menu.header.right');
$menu->add(...)
...
с анонимной функцией видно, чтоб не трогать локальные имена и сильно незаморачиваться как называть переменные для меню
или просто кому-то нравятся анонимные функции :)

Ну или после того как меню сформировано еще какие-то действия нужны, смотри код Menu::make.
 

WMix

герр M:)ller
Партнер клуба
пока внутренности не увидишь не поймешь, но да make как бы намекает
это может быть фасад для фабрики пунктов меню с последующим добавлением в коллекцию пунктов сгруппированных в коллекции менюшек
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
Да говнокод это. Не надо так писать и на ровном месте всё заворачивать в замыкания. Идиотам дали позднее статическое связывание и те нагорадили абы чего.
 

StalkerClasses

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

WMix

герр M:)ller
Партнер клуба
ну фасад, под капотом как создание "Builder" так и поиск в списке готовых
 

WMix

герр M:)ller
Партнер клуба
смотря на
PHP:
class X {
  private static $data = [];
  public static function make($key, $val){
    if(!isset(self::data[$key])){
        self::$data[$key] = new .self( ... );
    }
    return self::$data[$key]->add($val);
  }
}

X::make('a', 42);
думаю о Singleton и Composite
 

AmdY

Пью пиво
Команда форума
Там не нужна статика, всё можно хранить в объекте. А сам объект Menu передавать через DI
 

StalkerClasses

Новичок
Там не нужна статика, всё можно хранить в объекте. А сам объект Menu передавать через DI
Мне чем это меню не понравилось в отличие от хлебных крошек - оно создаётся всегда при запуске скрипта. А так быть не должно.
 

StalkerClasses

Новичок
смотря на
PHP:
class X {
  private static $data = [];
  public static function make($key, $val){
    if(!isset(self::data[$key])){
        self::$data[$key] = new .self( ... );
    }
    return self::$data[$key]->add($val);
  }
}

X::make('a', 42);
думаю о Singleton и Composite
$cab = $menu->add('Кабинет');
$cab->add('Профиль');

Вот этот кусок кода я не доконца понимаю. Это не текущий интерфейс...
 

AmdY

Пью пиво
Команда форума
Ну да, там возвращается скорее всего другой объект. В чём сложность?
 

WMix

герр M:)ller
Партнер клуба
Это не текущий интерфейс...
PHP:
// эти 2 записи дают одинаковый результат
// но во втором случае появляется ссылка на обьект $cab
$menu->add('Кабинет')->add('Профиль');

$cab = $menu->add('Кабинет');
$cab->add('Профиль');
PHP:
dump($cab);
dump($cab->add('Профиль'));
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Что ты не понимаешь? То, что сделал в меню ссылку на Кабинет и в нее запихнул Профиль?

ассоциированными? кем, с чем?
 
Сверху