Недавно я увидел несколько примеров кода PHP, которые выглядели следующим образом:
$myObj->propertyOne = 'Foo' ->propertyTwo = 'Bar' ->MethodA('blah');
В отличие от:
$myObj->propertyOne = 'Foo'; $myObj->propertyTwo = 'Bar'; $myObj->MethodA('blah');
Это из определенной структуры или конкретной версии PHP, потому что я никогда не видел, чтобы она работала?
То, что вы видели, было 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);
Я не могу поверить, что это действительно сработает, как вы показали его с полуколонами после каждой строки, или для назначения свойств напрямую; вы, возможно, видели что-то вроде
$myObj->setPropertyOne('Foo') ->setPropertyTwo('Bar') ->MethodA('blah');
который обычно называют fluent interface
или method chaining
, где каждый из методов возвращает экземпляр текущего объекта через return $this
Я взглянул на метод Chaining, о котором я никогда не слышал в PHP раньше. Очевидно, что мой пример – вздор.
Этот пост имеет смысл для меня:
PHP-метод цепочки?