我试图理解这段代码,当我到达最后一行,我没有得到它。 :(
我能有你的帮助,以找到答案,这是什么意思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;
}
更新: 我已经删除我的意见更好的澄清。
编码的这种方式被称为fluent interface。 return $this
返回当前对象,所以你可以这样写代码:
$object
->function1()
->function2()
->function3()
;
代替:
$object->function1();
$object->function2();
$object->function3();
这将返回该实例调用此方法上。这通常是实现fluent interfaces所以你可以调用的东西像做:
CoolClass::factory('hello')->setOptions(array('coolness' => 5))->sayHello();
如果双方setOptions
和sayHello
将同一对象上调用。
$this
意味着当前对象,所述一个的方法,目前正在运行。通过返回$this
一个参考对象的方法正在被发送回调用函数。
因此,任何人做
$foo2 = $foo->SetOptions($bar);
$ foo2的现指$ FOO也。
$这将是包含该函数的类。
所以,如果你要称呼它:
$obj->setOptions($options)
它会返回$ OBJ,已设定新的选择。通常,当事情是这样设置,你不必来获取返回,因为它影响的是对象本身,但它使这样你就可以在线使用。
你只可以创建一个函数链
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);
如果setOptions方法是ProgramOptions类或某事的一部分,$这将是指包含此方法的类,所以你会回传ProgramOptions的一个实例。
所谓Fluent Interface它是一种常见的OOP技术。它的主要目的,以帮助在语言链中的多个方法调用,不支持级联方法,如PHP。所以
返回$此;
将这个类的返回一个更新的实例(对象),因此它可以使在其范围内另一个电话。 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);