我有一个例子如下:
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"的值。