2. PHP – pierwszy skrypt, echo, komentarze.


Na zakończenie ostatniego tematu poprosiłam Cię o stworzenie „zeszytu elektronicznego”. W panelu lewym Twojego „zeszytu” dodaj link o treści: „PHP – pierwszy skrypt, echo, komentarze.”, który przeniesie Cię do podstrony o nazwie: „data_dziesiejszych_zajec.php” (oczywiście wpisz datę zajęć np. 280918.php).

Pliki projektu zapisuj w katalogu serwera WWW, np. C:\xampp\htdocs\NAZWA_PROJEKTU\ (Windows + XAMPP). Dzięki temu nie mieszasz plików z innymi ćwiczeniami i łatwo przenosisz projekt.

Uwaga: skrypty php muszą być zapisane w pliku z rozszerzeniem .php, NIE .html.

Uruchom XAMPP Control Panel i wystartuj ApacheMySQL uruchamiaj tylko wtedy, gdy dana lekcja faktycznie korzysta z bazy danych. Uruchom przeglądarkę internetową wpisując w pasku adresu: localhost.

Jesteś gotowy do pracy.

Składnia PHP

O składni języka PHP mówiliśmy na poprzedniej lekcji, ale w celu przypomnienia, aby skrypt PHP został prawidłowo zinterpretowany musi znajdować się pomiędzy standardowymi znacznikami:

<?php 
// kod PHP

Zamykanie ?> na końcu pliku PHP jest opcjonalne i często się go nie stosuje (zmniejsza ryzyko przypadkowego wysłania białych znaków i problemów z nagłówkami).

Komentarze

Pamiętasz jak wygląda komentarz w HTML?

<!-- komentarz -->

Komentarze w języku PHP występują w 3 postaciach:

<?php
// komentarz liniowy
# działa jak komentarz liniowy, ale w praktyce w PHP najczęściej spotkasz //
/* komentarza blokowy
kolejna linia
i kolejna
i kolejna
aż do zamknięcia komentarza */
?>

Uwaga: nie wolno zagnieżdżać w sobie komentarzy blokowych!

Komentarze są bardzo przydatnym narzędziem i nie bój się z nich korzystać.

Mamy jeszcze komentarz dokumentacyjny, który musi zaczynać się od /** (otwarcie) i kończyć na */ (zamknięcie). Każda linia wewnątrz bloku powinna zaczynać się od gwiazdki (*).

<?php
/**
* Krótki opis (podsumowanie) funkcji.
*
* Dłuższy opis funkcji, który może zawierać szczegóły
* dotyczące implementacji lub działania.
*
* @param string $param1 Opis parametru pierwszego.
* @param int $param2 Opis parametru drugiego.
* @return array Opis zwracanej wartości.
*/
function przykladowaFunkcja($param1, $param2) {
// ... kod
}
?>
Tagi pozwalają ustrukturyzować informacje o kodzie. Najpopularniejsze z nich to:
  • @param <typ> <zmienna> <opis>: Opisuje parametry funkcji/metody.
  • @return <typ> <opis>: Opisuje zwracaną wartość.
  • @var <typ>: Używany do definiowania typu zmiennych (np. właściwości klasy).
  • @author: Autor kodu.
  • @since: Wersja, od której element jest dostępny.
  • @throws <typ> <opis>: Opisuje wyjątki, które mogą zostać wyrzucone.

Wyświetlanie tekstu w przeglądarce

Aby wyświetlić tekst w przeglądarce posługujemy się instrukcją echo

echo "Hello World!"; // wyświetli napis: Hello World! 

Alternatywnie możesz posłużyć się funkcją print

print "Hello World!"; // wyświetli napis: Hello World!  

Hmm… czy są identyczne?

echo i print służą do wypisywania tekstu.
– echo to **konstrukcja językowa** i nie zwraca wartości.
– print zachowuje się jak **wyrażenie** i zwraca `1`, więc teoretycznie można go użyć w wyrażeniach.
W praktyce w nowoczesnym PHP (7/8) różnice wydajności są pomijalne — używaj tego, co jest czytelniejsze (najczęściej `echo`).

ale co i jak jeszcze można wyświetlać:

echo "<br>"; //w ten sposób dodajemy wyświetlanie nowej linii w HTML
echo "Linia 1\nLinia 2"; //w samym tekście (np. do pliku, do konsoli, do logów) używa się znaku nowej linii \n

//wyświetlanie wielu linii
echo "Ten zapis obejmuje wiele linii, ale zostaną one wyświetlone w jednej linii, ponieważ sama instrukcja echo nie widzi w tym przypadku znaków nowej linii";

echo "<br>";
echo "<br>Ten zapis również obejmuje wiele linii.<br>
Będą one wyświetlane, w wielu liniach,<br>
przez dodanie znacznika nowego wiersza.";

echo "<br>";
//alternatywna metoda wyświetlania. PHP umożliwia tworzenie wielowierszowych ciągów znaków za pomocą operatora <<<, czyli tzw. składni heredoc (here-document) umożliwiającej dosłowne wstawianie bloków tekstowych z zachowaniem miejsc łamania wierszy i innych białych znaków (w tym wcięć).Działa pod warunkiem, iż łańcuch rozpocznie się i zakończy tym samym słowem, w tym wypadku END.
Heredoc jest użyteczny, gdy chcesz wstawić większy blok tekstu bez uciekania cudzysłowów.
Uwaga: jeżeli wypisujesz tekst do przeglądarki, sam znak nowej linii w tekście nie zrobi „nowej linii” w HTML — do tego potrzebujesz np. `<br>` albo CSS (`white-space`).
echo <<<_END
Ten tekst może być wieloliniowy w edytorze.
Sprawdź czy zostanie tak wyświetlony w przeglądarce.
_END;

W PHP 8 masz też **nowdoc** (gdy nie chcesz interpretacji zmiennych):
```php
$txt = <<<'END'
Tekst z $zmienna – tutaj NIE zostanie podstawiona.
END;
```

echo "<br>";

//wyświetlanie znaków specjalnych tj. "" musimy poprzedzić backslash'em
echo "Jeżeli chcemy wyświetlić cudzysłów \"Przykład\".";
/*
W łańcuchach w cudzysłowie `"` musisz uciekać znak `"` oraz możesz w nich używać sekwencji specjalnych (np. `\n`, `\t`).
W apostrofach `'` nie ma interpretacji `\n` (poza `\'` i `\\`) i nie ma podstawiania zmiennych.
*/

echo "<br>";

echo "Znak dolara $";
echo "<br>";
echo "\"Tekst ujęty w znaki cudzysłowia\"";
echo "<br>";

// Wyświetlanie zawartości zmiennych
$zmienna1 = "wartość zmiennej 1";
$zmienna2 = "wartość zmiennej 2";
echo "zmienna1 = $zmienna1, a zmienna2 = $zmienna2"; // wyświetli: zmienna1 = wartość zmiennej 1, a zmienna2 = wartość zmiennej 2

echo "<br>";

// używając apostrofu wyświetlamy dokładnie to co znajduje się pomiędzy apostrofami (nie pobiera zawartości zmiennej)
echo 'wartość zmiennej 1 znajduje się w $zmienna1'; // wyświetli: wartość zmiennej 1 znajduje się w $zmienna1

echo "<br>";

// jeżeli wyświetlamy samą zmienną nie musimy używać cudzysłowów, ani apostrofów
echo $zmienna1; // wartość zmiennej 1

echo "<br>";

echo "Wartością zmiennej $zmienna1 jest $zmienna1 <br>";

echo "<br>";
//łączenie wielu elementów do wyświetlenia
echo $zmienna1.$zmienna2."<br>"; // za pomocą kropki dołączamy kolejne zmienne
echo $zmienna1,$zmienna2,"<br>"; // przecinek działa podobnie, tylko ma inne zachowanie (m.in. nie działa jak konkatenacja i ma inny priorytet) - stosujemy kropkę

// łączenie wielu elemetów - tekstu i zmiennych
echo 'Można '.'łączyć '.'wiele '.'elementów '.' oraz dodawać zmienne '.$zmienna1.'<br>';

// wyświetlanie tablicowe
$tablica = ["indeks" => "wartość"];
echo "wartość dla indeksu = {$tablica['indeks']} !";
// wyświetli: wartość dla indeksu = wartość !

echo "<br>";

// wyświetlanie z warunkiem jeżeli (warunek) ? 'wartość gdy prawda' : 'wartość gdy fałsz'
$wiek = 18;
echo ($wiek >= 18) ? 'pełnoletni' : 'niepełnoletni';

Integracja PHP z HTML

Skrypty PHP możesz umieszczać w dowolnym miejscu kodu HTML, zarówno przed i za znacznikami jak i wewnątrz nich:

<!DOCTYPE html>
<html>
   <head>
   </head>
   <body>
      <section id="<?php dowolny skrypt ?>">
         <a href="<?php echo 'https://kamakaczmarek.net'; ?>">Materiały do nauki</a>
      </section>    
   </body>
</html>

Istnieją 2 szkoły integrowania PHP z HTML: pierwsza mówi o wyświetlaniu HTML za pomocą instrukcji echo, druga o rozdzieleniu HTML i PHP i umieszczaniu w kodzie HTML wielu skryptów objętych znacznikami <?php ?>. Ty decydujesz jakiej użyjesz. Ja jestem zwolenniczką 2 szkoły, ponieważ nie tracimy kolorowania składni HTML, a poza tym w testach jest odrobinę wydajniejsza ;P

<?php
   //wyświetlanie HTML w PHP  
   echo "<p>użycie HTML w PHP".$zmienna1."</p>";  
?>
<p>użycie PHP w HTML <?php echo $zmienna1; ?></p>
<p>użycie PHP w HTML w skróconej formie <?=$zmienna1;?></p>

Wszystkie kody zaprezentowane w tej lekcji powinny zostać zapisane w Twoim zeszycie, przetestuj ich działanie i za pomocą CSS „upiększ” ich wyświetlanie.

Zasady pisania kodu (dobre praktyki)

Dobrze napisany kod to taki, który jest czytelnyspójnyłatwy do rozbudowy i bezpieczny. Poniższe zasady warto stosować od pierwszych ćwiczeń.

1) Czytelne nazewnictwo (zmienne, funkcje, pliki)

  • Używaj nazw, które mówią co przechowują / co robią, np. $cenaNetto$liczbaPunktowobliczSume().
  • Unikaj skrótów typu $a$x$tmp (chyba że w bardzo krótkim fragmencie i ma to sens).
  • Stosuj jeden styl zapisu, np. camelCase w PHP:
    • zmienne i funkcje: $nazwaUczniapoliczSrednia()
    • klasy: NazwaKlasy
  • Nazwy nie powinny być za długie, ale muszą być jednoznaczne.

2) Jeden język w kodzie

  • Trzymaj się konsekwentnie jednego języka nazw w projekcie.
  • Najczęściej spotkasz angielski (np. $userName$totalPrice), ale jeśli w klasie/zeszycie ustalacie polski — używaj polskiego wszędzie.
  • Nie mieszaj: np. nie rób $userImie albo $cenaTotal.

3) Wcięcia, spacje i estetyka

  • Stosuj wcięcia (indentację) w blokach { } — kod ma „wyglądać jak drzewko”.
  • Daj spacje po przecinkach i wokół operatorów:
    • dobrze: $a = $b + 2;
    • źle: $a=$b+2;
  • Jedna instrukcja na linię — unikaj „ściany kodu”.
  • Zostaw puste linie między logicznymi częściami programu (np. deklaracje zmiennych, obliczenia, wyświetlanie wyniku).

4) Komentarze – po co i jak

  • Komentarze mają tłumaczyć dlaczego coś robisz, a nie przepisywać oczywistości.
  • Dobre komentarze opisują zamiar, np. „Walidacja danych z formularza”, „Zabezpieczenie przed pustym parametrem”.

5) Unikaj powtórzeń (DRY)

  • Jeśli ten sam fragment kodu powtarza się 3+ razy, to znak, że warto zrobić:
    • funkcję, np. formatujDate()
    • lub osobny plik/klasę (w większym projekcie)

6) Prosta struktura i podział na elementy

  • Mieszanie wszystkiego w jednym miejscu utrudnia pracę.
  • Staraj się rozdzielać:
    • pobieranie danych (np. z formularza)
    • przetwarzanie (logika)
    • wyświetlanie (HTML)

7) Przewidywalność i bezpieczeństwo danych

  • Nie ufaj danym z zewnątrz (formularze, URL) — sprawdzaj je (walidacja).
  • Przy wyświetlaniu tekstu w HTML stosuj escapowanie (ochrona przed XSS), np. htmlspecialchars(...).
  • Ustal, co ma się stać w przypadku błędu (np. brak danych, zły format) i obsłuż to w kodzie.

8) Stała konsekwencja

Najważniejsza zasada: konsekwencja. Jeśli w projekcie ustalisz:

  • styl nazw,
  • wcięcia,
  • sposób formatowania, to trzymaj się tego w całym kodzie. Dzięki temu kod jest czytelny nie tylko dla Ciebie, ale też dla innych.