“return $this”是啥意思?
Posted
技术标签:
【中文标题】“return $this”是啥意思?【英文标题】:What does "return $this" mean?“return $this”是什么意思? 【发布时间】:2011-08-22 20:31:43 【问题描述】:我试图理解这段代码,但当我到达最后一行时,我没有明白。 :(
我可以请你帮忙看看,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;
更新: 为了更清楚地说明,我删除了我的 cmets。
【问题讨论】:
[11072965][1] [1] 的可能副本:***.com/questions/11072965/… 这意味着很多朋友。 【参考方案1】:这种编码方式称为fluent interface。 return $this
返回当前对象,所以你可以这样写代码:
$object
->function1()
->function2()
->function3()
;
代替:
$object->function1();
$object->function2();
$object->function3();
【讨论】:
在 php 中,调用是否必须像这样在单独的行上?我经常在这样的一行中看到链式调用: $object->chop()->putInBowl()->bakeForTen();用PHP不行吗? 它们不需要,但我发现这种方式更具可读性 - 包括将分号单独放在一行中。 为了方便,我们可以在所有方法的末尾加上return $this
吗?
你需要考虑你的类的使用——如果你可能会在一个之后调用它的多个方法,那么使用方法链接会很方便。一个完美的例子是 Doctrine 的 Doctrine_Query
类。
我明白了,当我们执行 create()->from()->where()->leftJoin()... 每一个实际上都是方法。很不错。 :)【参考方案2】:
这将返回调用此方法的实例。这通常是为了实现fluent interfaces,所以你可以调用类似的东西:
CoolClass::factory('hello')->setOptions(array('coolness' => 5))->sayHello();
setOptions
和 sayHello
将在同一个对象上调用。
【讨论】:
【参考方案3】:$this
表示当前对象,即当前正在运行该方法的对象。通过返回$this
,该方法正在工作的对象的引用被发送回调用函数。
所以任何人都在做
$foo2 = $foo->SetOptions($bar);
$foo2 现在也指代 $foo。
【讨论】:
【参考方案4】:你可以创建一个函数链
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】:$this 将是包含该函数的类。
如果你这样称呼它:
$obj->setOptions($options)
它将返回 $obj,它已使用新选项进行设置。一般来说,当这样设置时,您不必捕获返回,因为它会影响对象本身,但它会产生它以便您可以内联使用它。
【讨论】:
我喜欢您的说明,即您不必捕获回报。这就是我一直在寻找的。span> "$this 将是类..." - 不是类。它是对象实例。【参考方案6】:如果 SetOptions 方法是 ProgramOptions 类或其他东西的一部分,则 $this 将引用包含该方法的类,因此您将传回 ProgramOptions 的实例。
【讨论】:
【参考方案7】:这是一种常见的 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);
【讨论】:
以上是关于“return $this”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章