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.

9 komentarzy do “Marcin Wesel, Praktyczne PHP”

  1. Praktycznie to aplikacje pisane w PHP buduje się wykorzystując frameworka np. Laravel, Symfony.
    Osobiście nie kupowałem i nie zamierzam kupować tej książki, ale zastanawia mnie, czy jej autor wspomniał o wykorzystaniu frameworków w swojej książce?

  2. Cześć Tomku,

    bardzo Ci dziękuję za mega rzeczową recenzję książki oraz za faktyczne jej przeczytanie.

    Bez wątpienia, jest to najbogatszy feedback, który do tej pory dostałem (a o którym dowiedziałem się dopiero dzisiaj, czyli po ponad roku od publikacji). Wyciągnę wnioski i zastosuję w kolejnym wydaniu.

    Cały spis treści i konspekt książki są dostępne na stronie sprzedażowej (praktycznephp.pl) także widać tam dokładnie, co konkretnie znajduje się w książce. A jest to, jak sam napisałeś, przyspieszony kurs PHP i SQL, uzupełniony projektem praktycznym (który zajmuje ok. 40% zawartości książki). Jej odbiorcami są przede wszystkim osoby początkujące, które dopiero zaczynają przygodę z PHP. Wybacz, jeśli tytuł Cię zmylił i spodziewałeś się czegoś innego.

    Co do błędów w zawartości, to ciężko się nie zgodzić. Jest ich trochę – od prostych literówek, zamienionych apostrofów do poważniejszych, jak te, o których wspominasz. Sam pisałeś książkę, stąd wiesz, z jak wielką ilością pracy się to wiąże i jak łatwo jest coś przeoczyć.

    Ale cóż, tylko ten się nie myli kto nic nie robi.

    A jeśli ktoś kupi książkę lub e-booka i odniesie podobne wrażenie, co Ty (że nie tego się spodziewał i czuje zawód), zawsze może poprosić o zwrot pieniędzy – i to przez 30 dni od zakupu. Bez żadnych ukrytych klauzul.

    Zbieram uwagi do listy uwag i życzę Ci spokojnych świąt, które już niebawem. Wszystkiego dobrego!

    Pozdrawiam,
    Marcin Wesel

  3. Słuchajcie, kupiłem książkę Marcina i powiem Wam, że dla mnie jako osoby początkującej jest MEGA przydatna. Nie mogę odnieść się do prawdopodobnych błędów w tej książce (literówki to pikuś ;)), ale jeżeli są w niej tylko te o których napisano w recenzji to powiem Wam, że i w poważnych tytułach, znanych autorów one się zdarzają. Przeczytajcie sobie komentarz Marcina, człowiek podchodzi ze zrozumieniem do krytyki swojej książki. Mi to wystarcza, myślę, że każda następna będzie coraz lepsza. A co do samej książki to zdecydowanie pomaga nowicjuszom. Pozdrawiam.

  4. Dodam tylko, że dziękuję Tomaszowi (rozumiem, że on jest autorem recenzji) za konstruktywną krytykę. Dla mnie jako czytelnika jest bardzo pomocna. Pozdrawiam.

  5. Jako książka dla początkujących i potrzebuje wstępu o podstawach PHP, bo bez tego byłaby mocno niekompletna.

Skomentuj Comandeer Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

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