PHP:在对象中使变量可访问而不传递它,或者使用$ GLOBALS

时间:2014-10-08 11:19:17

标签: php variables global-variables scope

我有一个我需要在整个对象树中访问的变量。我的设计起初可能看起来很奇怪,但我正在尝试创建一个接口/ 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();

再次说明:通过这种设计,我专注于应该能够轻松修改配置文件的开发人员(同时保持简短而且仅限于必需品)并在祖父对象上调用一个方法(“用例”) ,以获得所需的输出。整个构造应该易于用于开发人员。一切都取决于$ myVar。当然,我仍然希望能够保持每个类的封装。

如何使$myVar对配置脚本中创建的所有对象实例都可访问

  • 没有多次传递变量(我想保持配置简短,没有重复的代码)
  • 没有使用$ GLOBALS(虽然现在看来这可能是最简单/最好的解决方案......: - /)

1 个答案:

答案 0 :(得分:0)

你可能正在使用Singleton模式。

使用这种模式你可以做到这样的事情:

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