PHP: сделать переменную доступной в объекте, не передавая ее, или используя $ GLOBALS

У меня есть переменная, к которой мне нужно получить доступ через дерево объектов. Мой дизайн на первый взгляд может показаться странным, но я пытаюсь создать интерфейс / API, который доступен с минимальным количеством строк кода и легко настраивается. Так что терпите меня …

Class GrandParent{
public function original(){
$myVar = 'I am needed throughout this method and within the config file';
require('config.php');
}
}

Class Parent{
public function passObj($obj){
//perform actions on obj.
}
public function output(){
//I really need to know the value of $myVar;
return $stuff;
}
}

Class Child{
public function __construct(){
//I really need to know the value of $myVar;
}
}

// config.php:

$parent = new Parent();
$child = new Child();
$parent->passObj($child);
return $parent->output();

// the use case:

$grandparent = new GrandParent($myVar);
echo $grandparent->orignial();

Опять же: с этим дизайном я сосредотачиваюсь на разработчике, который должен иметь возможность легко изменять конфигурационный файл (оставляя его коротким и только по необходимости) и вызывать один метод для объекта Grandparent («сценарий использования»), чтобы получить желаемый вывод. Вся конструкция должна быть простой в использовании для разработчика. Все зависит от $ myVar. Конечно, я все еще хотел бы иметь возможность хранить каждый класс в инкапсуляции.

Как мне сделать $myVar доступны для всех экземпляров объектов, созданных в скрипте конфигурации

  • Не передавая переменную пару раз (я хочу, чтобы конфигурация была короткой и простой, без повторяющегося кода)
  • без использования $ GLOBALS (хотя мне кажется, сейчас это может быть самым простым / лучшим решением …: — /)

0

Решение

Вы могли бы использовать шаблон Singleton.

С этим шаблоном у вас есть возможность делать такие вещи:

GrandParent::getInstance()->original();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]