在php构造函数中返回$ this有什么用?

时间:2015-12-21 15:50:36

标签: php constructor

我一直都这样做:

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

的重要性

2 个答案:

答案 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.