从setter错误的OOP POV返回$this
(用于setter链接)?
class Person
{
protected $firstName, $lastName;
public function __construct($first = null, $last = null)
{
$this->firstName = $first;
$this->lastName = $last;
}
public function setFirstName($first)
{
$this->firstName = $first;
return $this;
}
public function setLastName($last)
{
$this->lastName = $last;
return $this;
}
}
$p = new Person();
$p->setFirstName('John')->setLastName('Smith');
答案 0 :(得分:1)
这是在编码时提供“可用性”的常用方法。我更喜欢在一个项目中做到这一点,或者根本不这样做。否则可能会让人感到困惑。
答案 1 :(得分:1)
我不认为这是不好的做法,Zend框架使用它(我认为它是一个很好的PHP代码,几乎可以利用php提供的所有功能)。 Here's a nice article示例。
它允许您编写简化的代码而无需重复访问变量,更好的可读代码是重要的。
对象总是(在php5中)作为引用返回,因此它不应带来任何开销。
无论如何,我会将所有函数重新声明为public function &setFirstName($first)
,以明确表示您希望在下次调用中重写对象本身,但这绝对没有必要。
参考编辑
这里描述了references are(也读了他们做什么和不做什么)以及如何从功能return reference。如前所述,php 5“works with object as reference by default”(不完全正确,阅读文章)所以在函数名称之前添加&
是没有必要的,但你会明确(和明确)“我想使用对象引用”。