我最近看到了一些示例的PHP代码:
$myObj->propertyOne = 'Foo'
->propertyTwo = 'Bar'
->MethodA('blah');
相反:
$myObj->propertyOne = 'Foo';
$myObj->propertyTwo = 'Bar';
$myObj->MethodA('blah');
这是来自特定框架还是特定版本的PHP,因为我从未见过它有效?
答案 0 :(得分:5)
您看到的是fluent interface
,但您的代码示例有误。长话短说,fluent setter
应该返回$this
:
class TestClass {
private $something;
private $somethingElse;
public function setSomething($sth) {
$this->something = $sth;
return $this;
}
public function setSomethingElse($sth) {
$this->somethingElse = $sth;
return $this;
}
}
用法:
$sth = new TestClass();
$sth->setSomething(1)
->setSomethingElse(2);
答案 1 :(得分:3)
我无法相信它实际上会起作用,因为你在每一行之后用分号显示它,也不能直接分配属性;你很可能已经看过像
这样的东西$myObj->setPropertyOne('Foo')
->setPropertyTwo('Bar')
->MethodA('blah');
通常称为fluent interface
或method chaining
,其中每个方法都通过return $this
答案 2 :(得分:1)