为啥在 setter 方法中返回 $this?
Posted
技术标签:
【中文标题】为啥在 setter 方法中返回 $this?【英文标题】:Why return $this in setter methods?为什么在 setter 方法中返回 $this? 【发布时间】:2012-06-19 20:08:49 【问题描述】:检查 Zend 框架,我发现所有 setter 方法(我检查过的那些)都返回它所在的类的实例。它不仅设置一个值,还返回 $this
。例如:
/* Zend_Controller_Router */
public function setGlobalParam($name, $value)
$this->_globalParams[$name] = $value;
return $this;
/* Zend_Controller_Request */
public function setBaseUrl($baseUrl = null)
// ... some code here ...
$this->_baseUrl = rtrim($baseUrl, '/');
return $this;
/* Zend_Controller_Action */
public function setFrontController(Zend_Controller_Front $front)
$this->_frontController = $front;
return $this;
等等。每个公共二传手都返回$this
。而且它不仅适用于 setter,还有其他返回 $this
的操作方法:
public function addConfig(Zend_Config $config, $section = null)
// ... some code here ...
return $this;
为什么需要这个?返回$this
有什么作用?有什么特殊含义吗?
【问题讨论】:
返回$(this)
表示可以链接方法,例如$myClass->method_1($x)->method_2($y)
。
我过去也注意到了这一点,从没想过要问这个问题。谢谢,我现在有了答案。
【参考方案1】:
return $this
允许链接方法,例如:
$foo->bar('something')->baz()->myproperty
【讨论】:
【参考方案2】:这样就可以像这样“链接”对象上的方法调用。
$obj -> setFoo ('foo') -> setBar ('bar') -> setBaz ('baz') -> setFarble ('farble');
【讨论】:
我知道这条评论是在 2012 年发表的,它的主要目的是演示链式方法的使用,但对于所有刚刚了解这一点的新手:请不要将所有这些空格放在中间! :)以上是关于为啥在 setter 方法中返回 $this?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在使用 Promise 时在类方法中未定义“this”? [复制]
设计:Java 和在 setter 方法中返回自引用 [关闭]
JSR 303 Bean 验证 - 为啥使用 getter 而不是 setter?