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

hal*_*.am 6 php constructor class instance

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

实际上,当创建对象时,实际上可以self::__construct()__construct()调用返回a ,返回对象本身,好像第一个__construct()从未调用过一样.

Dav*_*dom 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!"
*/
Run Code Online (Sandbox Code Playgroud)

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

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


dm0*_*514 5

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

  • @NB情况并非如此,[是它](http://codepad.org/nMRedKBa)?Construct不返回类的实例,它在实例化期间调用并返回NULL.在实践中,至少. (2认同)
  • @NB:不完全是.在执行`new class`时,忽略`__construct`的返回值,并返回该对象.但是,当像正常函数一样调用`__construct`时,它就是这样.它就像一个函数,返回它返回的任何东西.http://ideone.com/IZSi8 (2认同)