Точная разница между собой::построить() и новое я()


Можете ли вы сказать мне точную разницу между return self::__construct() и return new self()?

Похоже, что на самом деле можно вернуть self::__construct() из вызова __construct() при создании объекта, возвращая сам объект, как если бы первый __construct() даже не вызывался.

Author: halfpastfour.am, 2012-04-04

2 answers

Это лучше всего проиллюстрировано в коде:

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. Он также снова запускает код в конструкторе. При вызове из самого метода classes __construct, возвращающий self::__construct() фактически вернет сам созданный класс, как это обычно делает метод.

return new self(); возвращает новый экземпляр класса вызывающего объекта.

 6
Author: DaveRandom, 2012-04-05 09:20:53

Я считаю, что new self() создаст новый экземпляр класса, в то время как self::__construct () вызывает только метод classes __construct.

 5
Author: dm03514, 2012-04-04 15:40:05