我正在尝试理解这段代码,当我到达最后一行时,我没有得到它。 :(
我可以帮助您了解return $this
的含义吗?
public function setOptions(array $options) {
$methods = get_class_methods($this);
foreach ($options as $key => $value) {
$method = 'set' . ucfirst($key);
if (in_array($method, $methods)) {
$this->$method($value);
}
}
//???? - return what ?
return $this;
}
更新
我删除了我的评论以便更好地澄清。
答案 0 :(得分:60)
这种编码方式称为fluent interface。 return $this
返回当前对象,因此您可以编写如下代码:
$object
->function1()
->function2()
->function3()
;
而不是:
$object->function1();
$object->function2();
$object->function3();
答案 1 :(得分:6)
这将返回调用此方法的实例。这通常用于实现fluent interfaces,因此您可以调用以下内容:
CoolClass::factory('hello')->setOptions(array('coolness' => 5))->sayHello();
在同一个对象上调用setOptions
和sayHello
的位置。
答案 2 :(得分:5)
$this
表示当前对象,当前正在运行该方法的对象。通过返回$this
对该对象的引用,该方法将被发送回调用函数。
所以任何人都在做
$foo2 = $foo->SetOptions($bar);
$ foo2现在也指$ foo。
答案 3 :(得分:4)
$这将是包含该函数的类。
所以如果你这样称呼它:
$obj->setOptions($options)
它将返回$ obj,已使用新选项设置。通常,当像这样设置某些内容时,您不必捕获返回,因为它会影响对象本身,但它会使它可以内联使用它。
答案 4 :(得分:2)
你可以创建一个功能链
class My_class
{
public function method1($param)
{
/*
* logic here
*/
return $this;
}
public function method2($param)
{
/*
* logic here
*/
return $this;
}
public function method3($param)
{
/*
* logic here
*/
return $this;
}
}
所以你可以使用这个
My_class obj = new My_class();
$return = obj->method1($param)->method2($param)->method3($param);
答案 5 :(得分:1)
如果SetOptions方法是ProgramOptions类的一部分,那么$ this将引用包含该方法的类,因此您将传回一个ProgramOptions实例。
答案 6 :(得分:0)
它是一种常见的OOP技术,称为Fluent Interface。它的主要目的是帮助在语言中链接多个方法调用,不支持方法级联,如PHP。所以
返回$ this;
将返回该类的更新实例(对象),以便它可以在其范围内进行另一次调用。参见PHP中的示例,
class Class_Name {
private field1;
private field2;
private field3;
public function setField1($value){
$this->field1 = $value;
return $this;
}
public function setField2($value){
$this->field2 = $value;
return $this;
}
public function setField3($value){
$this->field3 = $value;
return $this;
}
}
$object = new Class_Name();
$object->setField1($value1)->setField2($value2)->setField3($value3);