Php 静态方法-调用函数
首先调用factory(),然后调用构造函数,最后调用execute()。当然,这是意料之中的事 请求类包含两个非静态属性。我把它们都设置为工厂方法。像这样:Php 静态方法-调用函数,php,Php,首先调用factory(),然后调用构造函数,最后调用execute()。当然,这是意料之中的事 请求类包含两个非静态属性。我把它们都设置为工厂方法。像这样: echo System\Core\Request::factory()->execute(); 接下来是构造函数: public static function factory() { if(! Request::$initial) { $request = Request::$initial = Requ
echo System\Core\Request::factory()->execute();
接下来是构造函数:
public static function factory()
{
if(! Request::$initial)
{
$request = Request::$initial = Request::$current = new Request();
$request->foo = 'bar';
}
else
{
Request::$current = $request = new Request();
$request->foo = 'aaa';
}
return Request::$current;
}
发生了什么?在您设置
foo
之前调用构造函数,因为您在实例化请求后在工厂中设置了它
public function __construct()
{
echo $this->foo; // displays empty string
echo Request::$current->foo; // trying to get property of non-object
}
public static function factory()
{
if(! Request::$initial)
{
// constructor is called as part of this line
$request = Request::$initial = Request::$current = new Request();
// foo is set AFTER the constructor is called
$request->foo = 'bar';
}
else
{
// constructor is called as part of this line
Request::$current = $request = new Request();
// foo is set AFTER the constructor is called
$request->foo = 'aaa';
}
return Request::$current;
}