Używam PHP 5 i słyszałem o nowym podejściu obiektowym, zwanym „łączeniem metod”. Co to właściwie jest? Jak to zaimplementować?
php
oop
method-chaining
Sanjay Khatri
źródło
źródło
Odpowiedzi:
Jest to raczej proste, masz serię metod mutatora, z których wszystkie zwracają oryginalne (lub inne) obiekty, w ten sposób możesz nadal wywoływać metody na zwróconym obiekcie.
Wyprowadza „ab”
Wypróbuj online!
źródło
$foo->setBar(1)->setBaz(2)
vs$table->select()->from('foo')->where('bar = 1')->order('ASC)
. Ta ostatnia obejmuje wiele obiektów.$a = (new fakeString())->addA()->addB()->getStr();
Zasadniczo bierzesz przedmiot:
Wywołaj metodę, która skutecznie wykonuje a
return $this;
na końcu:Ponieważ zwraca ten sam obiekt, a raczej odwołanie do tego samego obiektu, możesz kontynuować wywoływanie metod tej samej klasy poza zwracaną wartością, na przykład:
To wszystko, naprawdę. Dwie ważne rzeczy:
Jak zauważyłeś, jest to tylko PHP 5. Nie będzie działać poprawnie w PHP 4, ponieważ zwraca obiekty według wartości, a to oznacza, że wywołujesz metody na różnych kopiach obiektu, co mogłoby złamać twój kod.
Ponownie, musisz zwrócić obiekt w swoich metodach łańcuchowych:
źródło
return &$this
w PHP4?Wypróbuj ten kod:
źródło
Łańcuch metod oznacza, że możesz łączyć wywołania metod:
Oznacza to, że metoda method1 () musi zwrócić obiekt, a metoda method2 () otrzymuje wynik metody method1 (). Method2 () następnie przekazuje wartość zwracaną do method3 ().
Dobry artykuł: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
źródło
Inny sposób tworzenia łańcuchów metod statycznych:
Powołanie
źródło
Istnieje 49 linii kodu, które pozwalają łączyć metody na tablicach takich jak ta:
Zobacz ten artykuł, który pokazuje, jak połączyć w łańcuch wszystkie siedemdziesiąt funkcji PHP array_.
http://domexception.blogspot.fi/2013/08/php-magic-methods-and-arrayobject.html
źródło
Jeśli masz na myśli tworzenie łańcuchów metod, jak w JavaScript (lub niektórzy pamiętają o jQuery), dlaczego nie wziąć biblioteki, która oferuje tego programistę. doświadczenie w PHP? Na przykład Dodatki - https://dsheiko.github.io/extras/ Ten rozszerza typy PHP o metody JavaScript i Underscore i zapewnia łańcuchowanie:
Możesz połączyć określony typ:
lub
Alternatywnie możesz przejść do polimorfii:
źródło
Poniżej znajduje się mój model, który jest w stanie znaleźć w bazie danych po ID. Metoda with ($ data) to moje dodatkowe parametry relacji, więc zwracam $ this, czyli sam obiekt. Na moim kontrolerze mogę go połączyć.
źródło