Marcin Wesel, Praktyczne PHP

Dzisiaj na tapet trafiła książka Marcina Wesela, Praktyczne PHP.

Zupełnie inaczej wyobrażałem sobie tę książkę. Mam wrażenie, że jej treść po prostu rozmija się z tytułem. Nie jest to bowiem pokazanie praktycznego wykorzystania PHP, a raczej przyśpieszony kurs programowania w tym języku. Co więcej, wygląda na to, że, nie licząc ostatniego rozdziału, treść jest faktycznie dostępna w formie kursu. Natomiast rzeczywista, praktyczna część to ostatni rozdział, opisujący stworzenie aplikacji do skracania linków.

Niemniej sam kod aplikacji odbiega od nowoczesnych standardów. Chyba najbardziej jest to widoczne w sposobie korzystania z szablonu panelu zarządzającego, który można zainstalować przez Composera. W książce jest on ściągany ręcznie. A przecież Composer, jako de facto oficjalny manager pakietów dla PHP, jest obecnie podstawą jakiegokolwiek większego projektu w tym języku! Nie ma sensu ręcznie zarządzać zależnościami, jeśli może to za nas robić narzędzie.

To jest właśnie kierunek, w którym tego typu książka powinna – moim zdaniem – podążyć: przedstawić na prostym przykładzie, jak wykorzystać obecne najlepsze praktyki:

  • jak pisać kod zgodny z ogólnie przyjętymi regułami formatowania kodu, takimi jak PSR-12 czy wcześniejsze PSR-2;
  • jak wykorzystywać automatyczne wczytywanie klas (PSR-4);
  • jak zarządzać zależnościami przy pomocy Composera;
  • jak oddzielić kod PHP od HTML-a przy pomocy sensownego systemu szablonów;
  • jak uruchomić środowiska dla serwera przy użyciu Dockera czy Vagranta.

Dzięki temu książka stanowiłaby doskonałe uzupełnienie kursu właśnie przez tematy mocno praktyczne, z pogranicza programowania i devops. Tego typu materiałów na rynku najzwyczajniej brakuje. Są materiały o podstawach, są materiały o niezwykle zaawansowanych rzeczach. A brakuje materiałów o praktycznym zastosowaniu dobrych praktyk przy tworzeniu projektów. Być może jest to spowodowane kompleksowością tematyki i trudności w wytłumaczeniu tego w prosty i przystępny sposób? Nie wiem, ale ta nisza jest po prostu całkowicie niezagospodarowana.

Projekt opisany w książce nie wykorzystuje też żadnych nowości zawartych w PHP, np. deklaracji typów czy wbudowanej obsługi hashowania haseł. To drugie dziwi tym bardziej, że jest to „nowość” stosunkowo już stara (pojawiła się w PHP 5.5.0) i udostępnia o wiele bezpieczniejsze algorytmy hashujące (bcrypt, Argon2) niż wykorzystywany w książce SHA-256, równocześnie dbając o całkowicie losową sól dla każdego hasła.

Bardzo dziwi mnie też skrótowe potraktowanie tematu OOP. Nie poruszono nawet tak niezwykle istotnej kwestii, jak wypieranie dziedziczenia przez kompozycję. W obecnym świecie PHP kompozycja jest o wiele ważniejsza i uchodzi za dobrą praktykę, podczas gdy dziedziczenie zaleca się ograniczać do niezbędnego minimum. Zresztą odnoszę wrażenie, że spora część klas w książce jest tak naprawdę zbiorami funkcji, nie pełnoprawną klasą w ujęciu OOP. Wskazuje na to fakt, że istnieją klasy mające wyłącznie metody statyczne (np. klasa do budowania strony HTML). Takie klasy można bez problemu rozbić na poszczególne funkcje. Inne klasy (jak np. User) można z kolei z powodzeniem zastąpić tablicą asocjacyjną, ponieważ zawierają wyłącznie dane.

Dodatkowo w książce, jak i w kursie, podane są niepoprawne informacje na temat wyrażeń regularnych:

Następnie każde wyrażenie regularne należy rozpocząć znakiem ^ oraz zakończyć znakiem $. Są to tak zwane znaki początku i końca.

To nieprawda. Te znaki całkowicie zmieniają znaczenie wyrażenia regularnego. Bez tych znaków wyrażenie jest dopasowywane do fragmentu ciągu tekstowego. Ich użycie wymusza dopasowanie do całości ciągu:

<?php
$regex = '/[a-z]/';
$regexFull = '/^[a-z]$/';
$text = 'abc';

var_dump( preg_match( $regex, $text ) ); // znaleziono dopasowanie
var_dump( preg_match( $regexFull, $text ) ); // nie znaleziono dopasowania

Z kolei przykłady opisujące operacje na ciągach tekstowych nie biorą pod uwagę faktu, że opisywane funkcje nie obsługują polskich znaków. Tym samym np. opisana funkcja strtoupper niepoprawnie obsłuży ciąg „Bardzo lubię placki”, produkując „BARDZO LUBIę PLACKI” zamiast „BARDZO LUBIĘ PLACKI”. Żeby uzyskać poprawny wynik, należy się posłużyć funkcjami z modułu Multibyte String.

Podsumowując, wydaje mi się, że ta książka to tak naprawdę papierowe wydanie kursu podstaw PHP, wzbogacone o krótki rozdział dotyczący tworzenia działającego projektu. To, jak dla mnie, zdecydowanie za mało, by nazwać to praktycznym PHP.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.