това се нарича верижно свързване на методи и се извършва чрез връщане на препратка към класа ( $this ) или друг обект на клас от тези функции. След това можете да извикате метод на върнатия обект.
Ето един прост пример.
class foo{
protected $_bar;
public function bar($value){
$this->_bar = $value;
return $this;
}
public function out(){
echo $this->_bar;
}
}
$a = new foo();
$a->bar('hello')->out();
изход:
'hello'
Само за да обясня малко повече, горният код $a->bar('hello')->out();
е приблизително еквивалентно на това:
$a = new foo();
$b = $a->bar('hello'); //$a and $b are the same instance of the object
$b->out();
Сега, защото bar()
връща $this
можем да го присвоим на $b
както по-горе и след това извикайте out()
. Но $a
и $b
и двете препращат към един и същ екземпляр на foo
обект, защото върнахме $this
от bar()
. Така че няма нужда от тази допълнителна "фалшива" променлива, тъй като можем просто да препращаме към връщащия обект директно за следващото извикване. Това работи с всеки обект, който се връща от метод (не само $this), но очевидно тогава следващото извикване във веригата е срещу върнатия обект.