This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!
Zazwyczaj podczas tworzenia klas implementuję w nich własne metody “podsumowujące” aktualny stan obiektu. W zdecydowanej większości przypadków to, co sam stworzę jest o wiele wygodniejsze w czytaniu niż np. wynik funkcji var_dump(). ;] Do tej pory podczas tworzenia takich metod korzystałem wyłącznie z konstrukcji echo i jej podobnych, jednak tym razem zdecydowałem się na ułatwienie sobie pracy i wykorzystanie składni HEREDOC, o której wcześniej tylko czytałem, a nie miałem okazji sprawdzić jej faktycznej przydatności.
Wstęp. Tym, którzy powyższą nazwę słyszą po raz pierwszy polecam lekturę manuala PHP, gdzie wszystko zostało dokładnie i całkiem przystępnie przedstawione. Zwykle kiedy chcemy wpisać bezpośrednio w kodzie długi literał mamy do wyboru praktycznie tylko wieloliniowy string ograniczony apostrofem lub cudzysłowem [pojedynczym lub podwójnym “ciapkiem” ;]], co nie jest zbyt wygodne, ze względu na to, że kolejne linie trzeba kończyć specjalnie wpisanymi kombinacjami kodów znaków \n i \r - zależnie od docelowego systemu operacyjnego. Z pomocą przychodzi mechanizm obecny w języku PHP od wersji 4.3.0, czyli wspomniany wcześniej HEREDOC:
|
|
Prawda, że wygodne [a nawet czytelne]?
Problem i rozwiązanie.
Jak zwykle jednak podczas wdrażania nowego rozwiązania pojawiają się problemy, z którymi wcześniej nie mieliśmy do czynienia. Tym razem trudności pojawiły się w momencie, kiedy zechciałem wstawić w bloku wywołanie funkcji, a dokładniej metody:
|
|
Okazało się, że interpreter widzi wszystko poza nawiasami okrągłymi, co powoduje błąd [obiekt jest instancją klasy CClass]:
|
|
Po chwili szukania informacji na ten temat u wujka Google natrafiłem na rozwiązanie: otóż, każdy złożony konstrukt (wywołanie funkcji lub metody) musi być ograniczony nawiasami klamrowymi - podobnie jak przy wywoływaniu metody poprzez variable function:
|
|
W związku z czym odpowiednie wywołanie składni HEREDOC brzmi następująco:
|
|
Podsumowanie.
Tak jak wspomniałem na początku tego wpisu, po raz pierwszy miałem okazję na poważnie użyć składni HEREDOC, a w Internecie panuje ogólnie negatywna opinia na temat tego typu konstrukcji - programiści uważają ją raczej za "zabawkę" i funkcjonalność raczej zaciemniającą a nie upraszczającą kod. Stąd moje pytanie do Was - co sądzicie na temat stosowania bloków HEREDOC [i NOWDOC] w kodzie? Czy stosujecie to często, rzadko, a może dopiero ten wpis uświadomił Wam istnienie tego typu możliwości?Poza tym, wolne chwile kilku ostatnich dni spędziłem na pracy nad obiektową wersją jednej z bibliotek PHP - myślę, że korzystanie z niej będzie o wiele wygodniejsze niż pozwala na to aktualny, składający się wyłącznie z funkcji interfejs. Mam nadzieję, że w niedalekiej przyszłości będę mógł udostępnić ją publicznie - jednak wszystko zależy od ilości czasu, który będę musiał poświęcić na naukę, ponieważ niestety maj i czerwiec najprawdopodobniej upłyną pod znakiem zaliczeń i egzaminów na studiach, a którego siłą rzeczy nie wykorzystam na dopracowanie kodu.