PHP中的静态成员?

时间:2015-02-15 22:12:01

标签: php static

我有一个例子如下:

class Application{

    private static $_app;
    public static function setApplication($app)
    {
        self::$_app = $app;
    }
    public static function getApplication()
    {
        var_dump(self::$_app);
    }
    public static function createDemoApplication($config)
    {
        return self::createApplication("Demo",$config);
    }
    public static function createApplication($class,$config)
    {
        return new $class($config);
    }
}

class Demo{

    public function __construct($config)
    {
        Application::setApplication($this);
        Application::getApplication();
        if(is_array($config))
        {
            foreach($config as $key=>$value)
            {
                $this->$key=$value;
            }

        }
        Application::getApplication();
    }

    public function getValue($key)
    {
        return $this->$key;
    }
}

$config = array('var1' => "test 1","var2" => "test 2");
echo Application::createDemoApplication($config)->getValue("var1");

结果:

首先执行代码Application::getApplication();时,它返回null。但是,这个位于第二位的是["var1"]=> string(6) "test 1" ["var2"]=> string(6) "test 2"

我完全不明白发生了什么,因为我先将$this分配给$_app变量,然后使用新的键/值设置$this

你能否向我解释一下这件事。谢谢

1 个答案:

答案 0 :(得分:1)

当我运行此代码时,我得到以下内容(为了清晰起见,我添加了注释):

// Output from first Application::getApplication();
object(Demo)[1]

// Output from second Application::getApplication();
object(Demo)[1]
  public 'var1' => string 'test 1' (length=6)
  public 'var2' => string 'test 2' (length=6) 

// Output from echo Application::createDemoApplication($config)->getValue("var1");
test 1

这对我来说似乎正常。第一次调用Application::getApplication()时,对象已创建,但没有属性。

然后在foreach循环中分配属性。

当您下次致电Application::getApplication()时,它会显示您已分配的属性。

最后,你回应了' var1'。

的价值