我有一个基类,其中包含所有其他文件。我可以在整个应用程序中访问此类(它是公开的)(通过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();
}
}
我的目标是以与$blah
相同的方式访问$base
。可能吗?这有意义吗?如果没有,那么提供对另一个开发人员可能想要使用的类的访问的最佳方法是什么?
答案 0 :(得分:1)
您可以使用$GLOBALS
,即包含所有全局变量的数组。它可以从一个函数中访问。也许更好,还有global
关键字和variable variables。
使用$GLOBALS
,您可以执行以下操作:
$GLOBALS[$variable] = $class::Instance();
使用global
关键字,您的功能如下所示:
global $$variable;
if (class_exists($class)){
$$variable = $class::Instance();
}
答案 1 :(得分:1)
访问“blah”变量的唯一方法是,如果它是全局的。这不是真正的OOP设计。
也许你应该考虑创建一个Registry类,它通过引用传递,包含所有这些变量?对于我自己来说,我发现它更适合这样做(更不用说噩梦了,谢谢Eclipse IDE!) - 就个人而言,我不喜欢Singleton类
...但是,您发布的代码并不完全有意义。你能发布更多细节吗?