访问PHP中的兄弟(?)变量



我有一个基类,它包括所有其他文件。我可以在整个应用程序中访问这个类(它是公共的)(通过base::$varbase::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();
}

最新更新