我有一个例子如下:
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
。
你能否向我解释一下这件事。谢谢
答案 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'。
的价值