Точная разница между собой::построить() и новое я()
Можете ли вы сказать мне точную разницу между return self::__construct()
и return new self()
?
Похоже, что на самом деле можно вернуть self::__construct()
из вызова __construct()
при создании объекта, возвращая сам объект, как если бы первый __construct()
даже не вызывался.
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();
возвращает новый экземпляр класса вызывающего объекта.
Я считаю, что new self()
создаст новый экземпляр класса, в то время как self::__construct ()
вызывает только метод classes __construct
.