6

との正確な違いを教えてreturn self::__construct()くださいreturn new self()

オブジェクトが作成されたときに実際に呼び出しself::__construct()からaを返すことができ、最初のオブジェクトが呼び出されなかっ__construct()たかのようにオブジェクト自体を返すことができるようです。__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メソッド自体から呼び出された場合、returningself::__construct()は、メソッドが通常行うように、構築されたクラス自体を実際に返します。

return new self();呼び出し元オブジェクトのクラスの新しいインスタンスを返します。

于 2012-04-04T15:48:55.603 に答える
6

これにより、classesメソッドを呼び出すだけnew self()で、クラスの新しいインスタンスが作成されると思います。self::__construct ()__construct

于 2012-04-04T15:40:05.013 に答える