这是什么PHP语法?

时间:2014-05-21 10:03:52

标签: php syntax frameworks

我最近看到了一些示例的PHP代码:

$myObj->propertyOne = 'Foo'
      ->propertyTwo = 'Bar'
      ->MethodA('blah');

相反:

$myObj->propertyOne = 'Foo';
$myObj->propertyTwo = 'Bar';
$myObj->MethodA('blah');

这是来自特定框架还是特定版本的PHP,因为我从未见过它有效?

3 个答案:

答案 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 interfacemethod chaining,其中每个方法都通过return $this

返回当前对象的实例

答案 2 :(得分:1)

我已经看过Method Hining,我以前从未在PHP中听说过。显然我的例子是无稽之谈。

这篇文章对我有用:

PHP method chaining?