Konstrukcja $obiekt->metoda->metoda;

1

Hej,
widziałem czasem konstrukcję kodu w taki sposób:

$obiekt = new Klasa;
$obiekt->metoda1()->metoda2();
$obiekt->metoda1()->metoda3()->metoda5();

Jak nazywa się taki zabieg i jak go dokonać? Zwyczajnie używa się jedynie $obiekt->metoda(); , a tutaj wygląda na kolejne "obrabianie" metody przez inną metodą.

2

To jest "method chaining".

Aby móc zrobić np taki ciąg - $obiekt->metoda1()->metoda2()
w ciele metody1 musisz zwracać $this

class example{
 function method1(){
  return $this;
 }
 function method2(){
   //jeśli to też ma chainować - to robisz tak samo jak wyżej return $this
 }
}
$obiekt = new example();
$obiekt->method1()->method2();

Równie dobrze możesz mieć 2 klasy, w której jedna zwraca obiekt drugiej.
np:

$objectA->getObjectB()->methodFromObjectB()
3

Warto wspomnieć, że method chaining potrafi czasem doprowadzić do bardzo upośledzonego designu aplikacji: https://ocramius.github.io/blog/fluent-interfaces-are-evil/.

1 użytkowników online, w tym zalogowanych: 0, gości: 1