我有一个基类,它包括所有其他文件。我可以在整个应用程序中访问这个类(它是公共的)(通过base::$var
或base::function()
)。
这个基类的功能之一是加载额外的框架。其中一个框架看起来像下面的(简化的)-基于我在SO.上看到的一个单例
<?php
class someOtherFramework{
public static $site = array();
public static function Instance() {
static $inst = null;
if ($inst == null) {
$inst = new someOtherFramework();
}
return $inst;
}
private function __construct() {
}
}
base::createInstance('blah', 'someOtherFramework');
?>
对base::createInstance
的调用如下:
public static function createInstance($variable, $class){
if (class_exists($class)){
$variable = $class::Instance();
}
}
目标是我可以像访问$base
一样访问$blah
。有可能吗?这有道理吗?如果没有,提供对另一个开发人员可能想要使用的类的访问的最佳方式是什么?
访问'blah'变量的唯一方法是,如果它是全局变量。这不是真正的OOP设计。
也许您应该考虑创建一个Registry类,该类通过引用传递,包含所有这些变量?就我自己而言,我发现这样做更整洁(而且更不用说噩梦了,谢谢Eclipse IDE!)——就我个人而言,我不喜欢Singleton类
不过,您发布的代码并不完全有意义。你能发布更多详细信息吗?
您可以使用$GLOBALS
,这个数组包含所有全局变量。它可以从函数中访问。也许更好的是,还有global
关键字和变量。
使用$GLOBALS
,您可以执行以下操作:
$GLOBALS[$variable] = $class::Instance();
使用global
关键字,您的函数将如下所示:
global $$variable;
if (class_exists($class)){
$$variable = $class::Instance();
}