PHP 5.4: wywołanie metody przy tworzeniu obiektu!

Uwaga! Ten wpis został napisany ponad rok temu i informacje w nim zawarte mogą być nieaktualne.

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:

Teraz można to ubrać w jedno polecenie:

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!

Komentarze

  1. Stanisław 'dozzie' Klekot ·

    Gratulacje! PHP wkrótce będzie umiało równie dużo co inne języki przed ośmiu laty!

  2. d4rky ·

    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)))

  3. pecet ·

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

  4. D4rky ·

    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 :<

  5. Sigvatr ·

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

  6. Piotr Rybałtowski ·

    Nie może i pewnie jeszcze długo nie będzie można. Trochę obiektowość jest tutaj naciągana.

  7. mt3o ·

    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ę…

  8. Piotr Rybałtowski ·

    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.

  9. Stanisław 'dozzie' Klekot ·

    …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.

  10. Piotr Rybałtowski ·

    BTW, zapis

    jest możliwy w 5.4 🙂

Dodaj komentarz