Deprecated: Creation of dynamic property Automattic\Jetpack\WP_JS_Data_Sync\Data_Sync::$namespace is deprecated in /home/owl_piotrek/blog.piotr.rybaltowski.pl/wp-content/plugins/jetpack-boost/jetpack_vendor/automattic/jetpack-wp-js-data-sync/src/class-data-sync.php on line 91

Deprecated: Creation of dynamic property Automattic\Jetpack_Boost\Features\Speed_Score\Speed_Score::$modules is deprecated in /home/owl_piotrek/blog.piotr.rybaltowski.pl/wp-content/plugins/jetpack-boost/app/features/speed-score/Speed_Score.php on line 20

Deprecated: Creation of dynamic property Jetpack_Publicize::$modules is deprecated in /home/owl_piotrek/blog.piotr.rybaltowski.pl/wp-content/plugins/jetpack/modules/publicize.php on line 38

Deprecated: Creation of dynamic property Automattic\Jetpack\Publicize\Publicize_UI::$in_jetpack is deprecated in /home/owl_piotrek/blog.piotr.rybaltowski.pl/wp-content/plugins/jetpack/modules/publicize.php on line 101

Deprecated: Creation of dynamic property JQueryColorbox::$colorboxSettings is deprecated in /home/owl_piotrek/blog.piotr.rybaltowski.pl/wp-content/plugins/jquery-colorbox/jquery-colorbox.php on line 93

Deprecated: Creation of dynamic property JQueryColorbox::$colorboxThemes is deprecated in /home/owl_piotrek/blog.piotr.rybaltowski.pl/wp-content/plugins/jquery-colorbox/jquery-colorbox.php on line 97

Deprecated: Creation of dynamic property JQueryColorbox::$colorboxUnits is deprecated in /home/owl_piotrek/blog.piotr.rybaltowski.pl/wp-content/plugins/jquery-colorbox/jquery-colorbox.php on line 121

Deprecated: Creation of dynamic property JQueryColorbox::$colorboxTransitions is deprecated in /home/owl_piotrek/blog.piotr.rybaltowski.pl/wp-content/plugins/jquery-colorbox/jquery-colorbox.php on line 127
PHP 5.4: wywołanie metody przy tworzeniu obiektu!

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!

  • 16 listopada 2011 o 11:22
    Bezpośredni odnośnik

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

  • 16 listopada 2011 o 11:22
    Bezpośredni odnośnik

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

  • 16 listopada 2011 o 11:22
    Bezpośredni odnośnik

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

  • 16 listopada 2011 o 11:22
    Bezpośredni odnośnik

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

  • 16 listopada 2011 o 11:22
    Bezpośredni odnośnik

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

  • 16 listopada 2011 o 11:22
    Bezpośredni odnośnik

    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.

  • 16 listopada 2011 o 11:22
    Bezpośredni odnośnik

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

%d bloggers like this: