self :: __ construct()和new self()之间的确切区别

时间:2012-04-04 15:35:48

标签: php class constructor instance

您能告诉我return self::__construct()return new self()之间的确切区别吗?

在创建对象时,似乎实际上可以从self::__construct()调用返回__construct(),返回对象本身,好像第一个__construct()从未被调用过一样。

2 个答案:

答案 0 :(得分:7)

最好在代码中说明:

class MyClass {

   public $arg;

   public function __construct ($arg = NULL) {
     if ($arg !== NULL) $this->arg = $arg;
     return $this->arg;
   }

   public function returnThisConstruct () {
     return $this->__construct();
   }

   public function returnSelfConstruct () {
     return self::__construct();
   }

   public function returnNewSelf () {
     return new self();
   }

}

$obj = new MyClass('Hello!');
var_dump($obj);
/*
  object(MyClass)#1 (1) {
    ["arg"]=>
    string(6) "Hello!"
  }
*/

var_dump($obj->returnThisConstruct());
/*
  string(6) "Hello!"
*/

var_dump($obj->returnNewSelf());
/*
  object(MyClass)#2 (1) {
    ["arg"]=>
    NULL
  }
*/

var_dump($obj->returnSelfConstruct());
/*
  string(6) "Hello!"
*/

return self::__construct()返回对象__construct方法返回的。它还会再次在构造函数中运行代码。从类__construct方法本身调用时,返回self::__construct()实际上将返回构造的类本身,就像该方法通常那样。

return new self();返回调用对象类的新实例

答案 1 :(得分:5)

我相信new self()会创建一个新的类实例,而self::__construct ()只调用类__construct方法。