Piotr Rybałtowski

Programista PHP, Symfony

PHPProgramowanie

PHP 5.4: wywołanie metody przy tworzeniu obiektu!

Krótko i na temat: najnowsze wydanie PHP 5.4 RC1 dostało nową funkcjonalność – wywoływanie metody od razu przy tworzeniu instancji obiektu. Bardzo często w kodzie pojawia się utworzenie obiektu tylko po to, żeby jedną metodę wywołać, np. pobrać dane z bazy:

$dbArticles = new DbArticles;
$articles = $dbArticles->fetch(array('page' => 3));

Teraz można to ubrać w jedno polecenie:

$articles = (new DbArticles)->fetch(array('page' => 3));

Zmiana kosmetyczne i głównie dla „upiększenia” kodu (chociaż przy okazji nie jest tworzona zmienna), ale moim zdaniem świeta rzecz. Zdarzało mi się wcześniej nawet robić metodę statyczną do pobierania instancji, żeby mniej więcej coś takiego zasymulować, podczas gdy np. JavaScript i innę języki mają to od dawna. Teraz ma to też PHP!

12 komentarzy do “PHP 5.4: wywołanie metody przy tworzeniu obiektu!

  • Well, Kohana rozwiązuje to przez factory method, więc raczej nie brakowało mi strasznie tej metody (Model::Factory(’articles’)->fetch(array(’page’ => 3)))

  • To się nazywa anonymous object, a nie jakieś wywołanie, wywołanie to tak przy okazji.

  • Tak czytam ten release note i smutłem: „Changed silent conversion of array to string to produce a notice.” – to już dawno powinno być warning/error :<

  • Heh, chciałem zadać dokładnie to samo pytanie, co Piotrek. No nic, poczekam na odpowiedź.

  • Jak to ma się do obiektowości? Wiem, że spałem na wykładach z programowania obiektowego, ale wywołania wartości spod indeksu ze zwracanego wyniku jakoś niekojarzę…

  • OK, trochę skrót myślowy, ale zazwyczaj na takie konstrukcje pozwalają języki, które „poważnie” podchodzą do obiektowości, gdzie nieważne w jaki sposób otrzymujesz zmienną (np. tak jak tu zwracana jest z metody), możesz jej używać normalnie. A w PHP trzeba wprost podać jej nazwę. Podobnie jest z funkcjami, które nie mogą być anonimowe i wywołane w locie. A zazwyczaj radzą sobie z tym języki, które funkcje również traktują jako obiekty.

  • …jak na przykład Python, gdzie masz do wyboru lambdy (usunięte w Pythonie 3), którymi da się tylko pojedynczy statement wykonać, albo normalne nazwane funkcje.

Skomentuj lub zadaj pytanie

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.