Konstrukcja $obiekt->metoda->metoda;

Odpowiedz Nowy wątek
2019-01-07 19:56
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ą.

Pozostało 580 znaków

2019-01-07 20:19

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()
edytowany 2x, ostatnio: axelbest, 2019-01-07 20:21

Pozostało 580 znaków

2019-01-07 20:22
3

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


Potwierdzam :) - axelbest 2019-01-07 20:22

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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