6

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

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

4

2 回答 2

8

这在代码中得到了最好的说明:

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()返回由 objects方法返回的值。__construct它还会再次运行构造函数中的代码。当从类__construct方法本身调用时,返回self::__construct()实际上将返回构造的类本身,就像该方法通常所做的那样。

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

于 2012-04-04T15:48:55.603 回答
6

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

于 2012-04-04T15:40:05.013 回答