PHP中的静态成员


Static member in PHP?

我有一个例子如下:

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

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

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

// 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"的值。