MEM*_*MEM 27 php oop zend-framework return
我正在尝试理解这段代码,当我到达最后一行时,我没有得到它.:(
我可以帮助您找到答案,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;
}
Run Code Online (Sandbox Code Playgroud)
更新:
我删除了我的评论,以便更好地澄清.
Mae*_*lyn 64
这种编码方式称为流畅的界面.return $this返回当前对象,因此您可以编写如下代码:
$object
->function1()
->function2()
->function3()
;
Run Code Online (Sandbox Code Playgroud)
代替:
$object->function1();
$object->function2();
$object->function3();
Run Code Online (Sandbox Code Playgroud)
这将返回调用此方法的实例.这通常用于实现流畅的界面,因此您可以调用以下内容:
CoolClass::factory('hello')->setOptions(array('coolness' => 5))->sayHello();
Run Code Online (Sandbox Code Playgroud)
如果双方setOptions并sayHello会在同一对象上调用.
$this表示当前对象,即当前正在运行该方法的对象.通过返回$this对该对象的引用,该方法正在工作,并被发送回调用函数.
所以有人在做
$foo2 = $foo->SetOptions($bar);
Run Code Online (Sandbox Code Playgroud)
$ foo2现在也指$ foo.
小智 5
你只需要创建一个函数链
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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以使用这个
My_class obj = new My_class();
$return = obj->method1($param)->method2($param)->method3($param);
Run Code Online (Sandbox Code Playgroud)