У меня есть переменная, к которой мне нужно получить доступ через дерево объектов. Мой дизайн на первый взгляд может показаться странным, но я пытаюсь создать интерфейс / 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
доступны для всех экземпляров объектов, созданных в скрипте конфигурации
Вы могли бы использовать шаблон Singleton.
С этим шаблоном у вас есть возможность делать такие вещи:
GrandParent::getInstance()->original();
Других решений пока нет …