Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 静态方法-调用函数_Php - Fatal编程技术网

Php 静态方法-调用函数

Php 静态方法-调用函数,php,Php,首先调用factory(),然后调用构造函数,最后调用execute()。当然,这是意料之中的事 请求类包含两个非静态属性。我把它们都设置为工厂方法。像这样: echo System\Core\Request::factory()->execute(); 接下来是构造函数: public static function factory() { if(! Request::$initial) { $request = Request::$initial = Requ

首先调用factory(),然后调用构造函数,最后调用execute()。当然,这是意料之中的事

请求类包含两个非静态属性。我把它们都设置为工厂方法。像这样:

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;
}