我一直都这样做:
class Class1{
protected $myProperty;
public function __construct( $property ){
$this->myProperty = $property;
}
}
但是最近,我遇到过这样一种特殊技术:
class Class2{
protected $myProperty;
public function __construct( $property ){
$this->myProperty = $property;
return $this;
}
}
在实例化这个类时,可以这样做:
$property = 'some value';
$class1 = new Class1( $property );
$class2 = new Class2( $property );
return $this
的构造函数中Class2
行的重要性是什么,因为有或没有它,变量$class2
仍会包含Class2
的实例?< / p>
编辑:请这与返回值的构造函数不同。我听说这个叫做流畅的接口(用于方法链接)。我看过这个帖子Constructor returning value?。这跟我问的不一样。我在问return $this
答案 0 :(得分:4)
在那里返回$this
没有用。
有可能他们使用自动插入return $this
或类似的IDE,这对方法链很有用,但是__construct
的return语句被丢弃了。
答案 1 :(得分:0)
return $this;
在构造函数中不应该有任何值。但是当你想要连续调用函数时,如果在类的任何其他函数中返回它,我会看到一些值。例如:
class Student {
protected $name;
public function __construct($name) {
$this->name = $name;
//return $this; (NOT NEEDED)
}
public function readBook() {
echo "Reading...";
return $this;
}
public function writeNote() {
echo "Writing...";
return $this;
}
}
$student = new Student("Tareq"); //Here the constructor is called. But $student will get the object, whether the constructor returns it or not.
$student->readBook()->writeNote(); //The readBook function returns the object by 'return $this', so you can call writeNote function from it.