Kurs PHP z przykładami do uruchomienia
Darmowy kurs i dokumentacja PHP 8: tablice, foreach, funkcje tekstowe, daty, formularze, klasy i błędy. Każdy przykład działa na stronie, a przykłady wypisujące HTML pokazują stronę z formularzami, które możesz wysłać.
Zacznij ścieżkę PHP z przewodnikiemPierwsze kroki
- Co to jest PHP?PHP to język skryptowy działający po stronie serwera: plik PHP uruchamia się na serwerze WWW i wysyła do przeglądarki zbudowany przez siebie HTML. Napędza WordPressa, Laravela i dużą część internetu, a do tego uruchamia skrypty z wiersza poleceń.
- Instalacja PHPZainstaluj PHP jednym poleceniem: winget na Windowsie, Homebrew na macOS, apt lub dnf na Linuksie. Potem uruchom php -v w terminalu, aby sprawdzić, czy działa i którą wersję masz.
- Uruchamianie PHPUruchom plik PHP z terminala poleceniem php index.php albo serwuj folder w przeglądarce przez wbudowany serwer PHP: php -S localhost:8000. Żadna z tych metod nie wymaga Apache ani XAMPP.
- echo i printecho wypisuje jeden lub więcej łańcuchów: echo "Hello, $name"; albo echo $a, $b;. To typowy sposób wysyłania tekstu lub HTML na stronę. print robi to samo z jedną wartością i zwraca 1; <?= $x ?> to skrócona forma wewnątrz HTML.
- Raportowanie błędówAby pokazać wszystkie błędy PHP, wstaw ini_set('display_errors', '1'); i error_reporting(E_ALL); na początku skryptu albo ustaw display_errors = On i error_reporting = E_ALL w php.ini. Na produkcji zapisuj błędy do logu zamiast je wyświetlać.
- PHP czy PythonPHP powstał dla WWW: plik wykonuje się przy każdym żądaniu i wypisuje stronę, a język napędza WordPressa i Laravela. Python to język ogólnego przeznaczenia, który też obsługuje WWW (Django, Flask) i dominuje w data science, automatyzacji i uczeniu maszynowym.
- PHP czy JavaScriptPHP działa na serwerze i wysyła do przeglądarki gotowy HTML. JavaScript działa w przeglądarce, gdzie zmienia stronę po jej wczytaniu, a z Node.js także na serwerze. Większość stron używa obu: PHP do budowania stron i API, JavaScriptu do interakcji.
Podstawy
- ZmienneZmienna PHP zaczyna się od $ i powstaje przez przypisanie: $name = "Ada";. Nie ma słowa kluczowego deklaracji ani stałego typu. Funkcje nie widzą zmiennych z zewnątrz, chyba że je przekażesz, użyjesz global albo je przechwycisz; static zachowuje wartość między wywołaniami.
- Typy danychPHP ma dziesięć typów: cztery skalarne (int, float, string, bool), cztery złożone (array, object, callable, iterable) i dwa specjalne (null, resource). var_dump($x) pokazuje typ i wartość, a gettype($x) zwraca nazwę typu.
- Łańcuchy znakówŁańcuchy w PHP łączysz operatorem kropki ("Hello, " . $name) albo wstawiasz zmienne prosto w podwójne cudzysłowy ("Hello, $name"). Pojedyncze cudzysłowy wypisują tekst tak, jak jest zapisany. Poznaj łączenie, .=, interpolację tablic i obiektów oraz zmianę wielkości liter przez strtoupper, strtolower, ucfirst i ucwords.
- Heredoc i nowdocHeredoc w PHP to łańcuch wielowierszowy, który zaczyna się od <<<EOT i kończy na EOT; podstawia zmienne jak łańcuch w podwójnych cudzysłowach. Nowdoc, <<<'EOT', zachowuje tekst dokładnie tak, jak jest zapisany. Poznaj składnię, zasady wcięć, interpolację tablic i obiektów oraz szablony HTML.
- OperatoryOperatory PHP działają na wartościach: +, -, *, /, %, ** do arytmetyki, =, +=, .=, ??= do przypisania, &&, ||, ! i xor do logiki, . do łączenia łańcuchów, ==, ===, <=> do porównań oraz ++ i -- do inkrementacji. Poznaj każdą grupę na przykładach i pułapkę priorytetu and vs &&.
- Operatory porównaniaPHP porównuje wartości przez == (równe po żonglowaniu typami), === (równa wartość i ten sam typ), != i !==, < > <= >= oraz operator spaceship <=>. Dowiedz się, kiedy == konwertuje typy, co zmieniło się w PHP 8, i zobacz każde luźne i ścisłe porównanie w jednej tabeli.
- Operator trójargumentowyOperator trójargumentowy w PHP to if/else w jednej linii: $result = $condition ? 'yes' : 'no';. Poznaj skrócony zapis ?: (operator Elvis), różnicę względem ??, powód, dla którego zagnieżdżone wyrażenia od PHP 8 wymagają nawiasów, i sytuacje, w których match jest czytelniejszy.
- Null coalescing ??Operator null coalescing w PHP zwraca lewą stronę, chyba że jest null albo nie jest ustawiona: $name = $_GET['name'] ?? 'Guest';. Nigdy nie ostrzega o brakującej zmiennej ani kluczu tablicy. Poznaj łańcuchy ??, przypisanie ??=, ?? vs ?: i operator nullsafe ?->.
- Rzutowanie typówZamień łańcuch PHP na liczbę całkowitą przez (int) $str albo intval($str); (int) "42" daje 42, a (int) "12abc" daje 12. Poznaj rzutowanie na int, float, bool, string i array, łańcuchy liczbowe, intval z podstawą, settype i walidację danych zamiast cichego 0.
- StałeStała w PHP to nazwa wartości, która nie może się zmienić: const MAX_USERS = 100; albo define('MAX_USERS', 100);. Poznaj define vs const, stałe tablicowe, stałe klas z self::, sprawdzanie przez defined() oraz stałe magiczne __LINE__, __FILE__, __DIR__ i __CLASS__.
- isset()isset($var) zwraca true, gdy zmienna istnieje i nie jest null, a w przeciwnym razie false, bez żadnego ostrzeżenia. Sprawdza też klucze tablic i właściwości obiektów: isset($user['email']). Poznaj isset z kilkoma zmiennymi, zagnieżdżone klucze, isset vs empty, isset vs array_key_exists i sprawdzanie wysłania formularza.
- empty()empty($var) zwraca true, gdy zmiennej brakuje albo jest fałszywa: null, false, 0, 0.0, "", "0" lub []. Nigdy nie ostrzega o niezdefiniowanych zmiennych ani kluczach. Dowiedz się, dlaczego "0" liczy się jako puste, jak dokładnie sprawdzić pusty łańcuch lub tablicę, czym różni się empty od isset i jak walidować dane z formularza.
- Matematyka i zaokrąglanieround($x, 2) zaokrągla do dwóch miejsc po przecinku, floor() zawsze zaokrągla w dół, a ceil() zawsze w górę. Do tego intdiv(), operator %, ** do potęg, abs(), max(), min() i random_int() do liczb losowych.
Sterowanie przepływem
- if, elseif, elseif (warunek) { ... } wykonuje blok tylko wtedy, gdy warunek jest prawdziwy, elseif sprawdza kolejny warunek, a else działa, gdy żaden nie pasował. Strona opisuje elseif vs else if, && i ||, wartości traktowane jako prawda i składnię if: endif; w szablonach HTML.
- Instrukcja switchswitch ($value) porównuje jedną wartość z listą etykiet case i wykonuje kod od pierwszego dopasowania aż do break. Strona opisuje wiele przypadków, przechodzenie do kolejnych case, default, switch(true) i powód, dla którego switch używa luźnego porównania ==.
- Wyrażenie matchmatch ($x) { 1, 2 => 'low', default => 'other' } porównuje wartość ścisłym ===, zwraca wynik pierwszego pasującego ramienia i rzuca UnhandledMatchError, gdy nic nie pasuje. Strona opisuje match vs switch, match(true) i match z enumami.
- Pętla forfor ($i = 0; $i < 10; $i++) { ... } wykonuje blok określoną liczbę razy: wartość początkowa, warunek sprawdzany przed każdym przebiegiem i krok. Strona opisuje przechodzenie po tablicy przez indeks, odliczanie w dół, pętle zagnieżdżone, break i continue.
- Pętla whilewhile (condition) { ... } powtarza blok, dopóki warunek jest prawdziwy, i sprawdza go przed każdym przebiegiem. do { ... } while (condition); sprawdza po, więc zawsze wykonuje się co najmniej raz. Strona opisuje while (true) z break, czytanie pliku linia po linii i unikanie pętli nieskończonych.
- Pętla foreachforeach ($array as $value) odwiedza każdy element tablicy, a foreach ($array as $key => $value) daje też klucz. Strona opisuje pobieranie indeksu, zmianę wartości przez referencję i pułapkę z unset(), break i continue, tablice zagnieżdżone, list() w foreach i budowanie HTML.
Tablice
- TabliceTablica w PHP to uporządkowana lista wartości, z których każda leży pod kluczem: $fruits = ['apple', 'banana']; odczytujesz jako $fruits[0]. Dowiedz się, jak tworzyć tablice, odczytywać i zmieniać elementy, przechodzić po nich, wypisywać je i po którą funkcję sięgnąć.
- Tablice asocjacyjneTablica asocjacyjna w PHP przechowuje wartości pod kluczami, które sam nazywasz: $user = ['name' => 'Ada', 'age' => 36]; odczytujesz jako $user['name']. Dowiedz się, jak dodawać, zmieniać i usuwać pary, przechodzić po kluczach i wartościach, pobrać wszystkie klucze, sprawdzić klucz i sortować.
- Tablice wielowymiaroweTablica wielowymiarowa w PHP to tablica, której elementami są tablice; odczytujesz ją jedną parą nawiasów na poziom: $grid[1][2] albo $users[0]['name']. Dowiedz się, jak tworzyć tablice zagnieżdżone, czytać i zmieniać głębokie wartości, używać zagnieżdżonego foreach, zbudować tabelę HTML, wyciągnąć kolumnę i sortować wiersze.
- array_push()array_push($arr, $value) dodaje jedną lub więcej wartości na koniec tablicy; $arr[] = $value robi to samo dla jednej wartości i jest szybsze. Dowiedz się, jak dodać element na koniec, na początek lub w środek tablicy, dodać klucz i wartość oraz uniknąć klasycznego błędu z wartością zwracaną.
- count()count($arr) zwraca liczbę elementów tablicy w PHP, więc count(['a', 'b', 'c']) to 3. Dowiedz się, jak liczyć tablice zagnieżdżone z COUNT_RECURSIVE, jak sizeof() ma się do count(), jak liczyć pasujące wartości i dlaczego count(null) od PHP 8 rzuca TypeError.
- in_array()in_array($needle, $haystack) zwraca true, gdy wartość jest w tablicy. Podaj true jako trzeci argument, in_array('1', $ids, true), aby wykonać ścisłe sprawdzenie, w którym musi zgadzać się też typ. Strona opisuje flagę strict, wyszukiwanie bez rozróżniania wielkości liter, sprawdzanie kilku wartości, tablice zagnieżdżone i szybszą alternatywę z isset.
- array_search()array_search($value, $array) zwraca klucz pierwszego elementu równego $value albo false, gdy takiego nie ma. Ponieważ kluczem może być 0, wynik zawsze sprawdzaj przez !== false. Strona opisuje wyszukiwanie ścisłe, znajdowanie wszystkich dopasowań, przeszukiwanie tablicy wielowymiarowej przez array_column i wyszukiwanie bez rozróżniania wielkości liter.
- array_key_exists()array_key_exists('key', $array) zwraca true, gdy tablica ma ten klucz, nawet jeśli jego wartość to null. isset($array['key']) jest szybsze, ale dla wartości null zwraca false. Poznaj różnicę, key_exists(), klucze zagnieżdżone, sprawdzanie kilku kluczy i powód, dla którego obiekty wymagają property_exists().
- array_merge()array_merge($a, $b) łączy tablice w jedną: wartości z kluczami liczbowymi są dopisywane i numerowane od nowa, a przy kluczach tekstowych wygrywa późniejsza tablica. Dowiedz się, czym array_merge różni się od operatora + i składni [...$a, ...$b], jak połączyć listę tablic i kiedy lepiej pasuje array_merge_recursive lub array_replace.
- array_map()array_map($callback, $array) wywołuje callback na każdym elemencie i zwraca nową tablicę z wynikami. Poznaj funkcje strzałkowe, klucze, mapowanie kilku tablic naraz i sytuacje, w których lepiej pasuje array_walk lub foreach.
- array_filter()array_filter($array, $callback) zostawia elementy, dla których callback zwraca true. Dowiedz się, jak usuwać puste wartości, filtrować po kluczu z ARRAY_FILTER_USE_KEY, numerować wynik od nowa przez array_values i sumować przez array_reduce.
- Sortowanie tablicsort($array) sortuje listę w miejscu, asort i ksort sortują tablicę asocjacyjną po wartości lub po kluczu, a usort sortuje według twojego porównania. Poznaj je wszystkie, posortuj tablicę wielowymiarową po kolumnie i uniknij klasycznego błędu $sorted = sort($arr).
- Usuwanie z tablicyunset($array[$key]) usuwa element po kluczu, array_splice usuwa po pozycji i numeruje od nowa, a array_diff usuwa po wartości. Poznaj każdy sposób, numerowanie od nowa po usunięciu i pułapkę z array_search, która usuwa niewłaściwy element.
- array_slice()array_slice($array, $offset, $length) zwraca kopię fragmentu tablicy bez zmiany oryginału. Poznaj ujemne offsety dla ostatnich elementów, preserve_keys, stronicowanie listy i różnicę względem array_splice.
- array_unique()array_unique($array) usuwa powtórzone wartości i zostawia pierwsze wystąpienie każdej z nich, z jej oryginalnym kluczem. Dowiedz się, jak ponumerować wynik od nowa, usuwać duplikaty bez rozróżniania wielkości liter, usuwać duplikaty z tablicy wielowymiarowej oraz liczyć i znajdować powtórzenia.
- array_column()array_column($rows, 'email') zwraca pole email z każdego wiersza jako płaską tablicę. Poznaj argument klucza indeksu, indeksowanie wierszy po id, użycie z obiektami i znajdowanie wiersza przez array_search.
- Destrukturyzacja i list()[$a, $b] = $array przypisuje dwa pierwsze elementy do $a i $b w jednej linii, a ['name' => $name] = $user robi to samo po kluczu. list() to starszy zapis. Strona opisuje pomijanie elementów, zamianę zmiennych, zwracanie wielu wartości, destrukturyzację w foreach i operator rozpakowania ....
Łańcuchy znaków
- explode()explode(',', $string) dzieli string przy każdym przecinku i zwraca kawałki jako tablicę. Poznaj parametr limit, podział po znaku nowej linii, przycinanie kawałków i sytuacje, w których lepszym narzędziem jest str_split lub preg_split.
- implode()implode(', ', $array) łączy wartości tablicy w jeden string z separatorem między nimi. Poznaj implode z kluczami, tablice asocjacyjne, budowanie list HTML i różnicę między implode a join.
- str_replace()str_replace($search, $replace, $subject) zastępuje każde wystąpienie $search przez $replace. Poznaj tablice wartości do wyszukania i zamiany, liczenie zamian, str_ireplace bez rozróżniania wielkości liter i zamianę tylko pierwszego wystąpienia.
- substr()substr($string, $offset, $length) zwraca fragment stringa. Poznaj ujemne offsety, pobieranie pierwszych lub ostatnich znaków, mb_substr dla polskiego, japońskiego i innego tekstu UTF-8, substr_count i skracanie tekstu z wielokropkiem.
- strpos()strpos($haystack, $needle) zwraca pozycję pierwszego wystąpienia $needle albo false, jeśli go nie znaleziono. Poznaj sprawdzenie !== false, stripos bez rozróżniania wielkości liter, ostatnie dopasowanie przez strrpos i znajdowanie wszystkich wystąpień.
- str_contains()str_contains($haystack, $needle) zwraca true, jeśli $needle występuje gdziekolwiek w $haystack. Poznaj wersję bez rozróżniania wielkości liter, str_starts_with i str_ends_with, sprawdzanie kilku słów i wersję ze strpos dla PHP 7.
- trim()trim($string) usuwa spacje, tabulatory i znaki nowej linii z obu końców stringa; ltrim() i rtrim() czyszczą jedną stronę. Dowiedz się, jak usuwać wybrane znaki, japońską spację pełnej szerokości i przycinać każdą wartość w tablicy.
- strlen()strlen($string) zwraca długość stringa w bajtach; mb_strlen($string) zwraca ją w znakach. Dowiedz się, dlaczego polskie litery, japoński tekst i emoji dają różne wyniki, jak sprawdzić pusty string i jak walidować długość danych.
- sprintf()sprintf() buduje string z formatu i wartości: sprintf('%05.2f', 3.14159) zwraca "03.14". Poznaj %s, %d i %f, dopełnianie zerami, stałą liczbę miejsc po przecinku, wyrównanie, numerowanie argumentów, printf i vsprintf.
- number_format()number_format(1234567.891, 2) zwraca "1,234,567.89": zaokrągla do podanej liczby miejsc po przecinku i dodaje separator tysięcy. Poznaj cztery parametry, formaty europejskie, polski i japoński, sposób zaokrąglania i powód, dla którego wynik jest stringiem.
- Nowa liniaAby wypisać nową linię w PHP, napisz "\n" w podwójnych cudzysłowach albo użyj PHP_EOL. Na stronie WWW znak nowej linii nie jest widoczny, więc użyj <br> albo nl2br(). Poznaj różnicę, powód, dla którego '\n' w pojedynczych cudzysłowach nie działa, oraz sposoby dzielenia tekstu na linie i usuwania znaków końca linii.
- preg_match()preg_match($pattern, $subject, $matches) sprawdza string wyrażeniem regularnym i zwraca 1 przy dopasowaniu, a 0 przy jego braku. Poznaj grupy przechwytujące, grupy nazwane, preg_match_all, kotwice, wzorce do walidacji i modyfikator u dla UTF-8, polskich znaków i japońskiego.
- preg_replace()preg_replace($pattern, $replacement, $subject) zastępuje każde dopasowanie wyrażenia regularnego: preg_replace('/\s+/', ' ', $text) łączy białe znaki w jedną spację. Poznaj odwołania wsteczne, takie jak $1, preg_replace_callback, usuwanie znaków niealfanumerycznych, limity i liczniki.
Funkcje
- FunkcjeFunkcję w PHP definiujesz przez function name($param) { return $value; }. Poznaj wartości zwracane, parametry domyślne, argumenty nazwane, przekazywanie przez referencję, deklaracje typów ze strict_types, typy nullable i unijne oraz wariadyczne ...$args.
- Funkcje strzałkoweFunkcja strzałkowa to anonimowa funkcja z jednym wyrażeniem, zapisywana jako fn($x) => $x * 2. Używa zmiennych z zewnątrz automatycznie, przez wartość, bez use. Poznaj składnię, sposób przechwytywania, typy, callbacki dla array_map i usort oraz sytuacje, w których lepiej użyć pełnego domknięcia.
- Funkcje anonimoweFunkcja anonimowa (domknięcie, closure) to funkcja bez nazwy zapisana w zmiennej: $greet = function ($name) { return "Hi $name"; };. Poznaj słowo kluczowe use, przechwytywanie przez referencję, callable, składnię first-class callable strlen(...) i domknięcia wewnątrz klas.
- GeneratoryGenerator to funkcja, która przez yield oddaje wartości po jednej, dzięki czemu foreach może przejść po milionie elementów bez budowania tablicy. Poznaj yield, klucze, oszczędność pamięci, ciągi nieskończone, yield from, send() i getReturn().
Klasy i obiekty
- Klasy i obiektyKlasa w PHP to szablon zadeklarowany przez `class Name { }`, a `new Name()` tworzy z niego obiekt. Poznaj właściwości, metody, `$this`, public/private/protected, właściwości typowane i readonly, `__toString` i powód, dla którego przypisanie obiektu go nie kopiuje.
- KonstruktoryKonstruktor w PHP to metoda `__construct()`, która wykonuje się automatycznie, gdy piszesz `new ClassName(...)`. Poznaj promocję właściwości w konstruktorze, argumenty domyślne i nazwane, walidację, `parent::__construct()` i sposób na kilka konstruktorów przez statyczne metody fabryczne.
- DziedziczenieW PHP klasa dziedziczy po innej przez `class Dog extends Animal`: dostaje publiczne i chronione właściwości oraz metody rodzica, może je nadpisać i nadal wywołać oryginał przez `parent::method()`. Poznaj nadpisywanie, protected, final, instanceof i pułapkę z metodami prywatnymi.
- InterfejsyInterfejs w PHP wymienia metody, które klasa obiecuje mieć: `interface Shape { public function area(): float; }`, a `class Circle implements Shape` musi wtedy zdefiniować `area()`. Poznaj typowanie interfejsami, implementowanie kilku interfejsów, stałe interfejsów, rozszerzanie interfejsów, interfejsy wbudowane, takie jak Countable, oraz interfejs vs klasa abstrakcyjna.
- Klasy abstrakcyjneKlasę abstrakcyjną w PHP deklaruje się jako `abstract class Name` i nie da się utworzyć jej instancji: istnieje po to, by ją rozszerzać. Może zawierać właściwości, konstruktor i gotowe metody oraz metody `abstract` bez treści, które musi zaimplementować każda klasa potomna.
- TraityTrait w PHP to wielokrotnego użytku blok metod i właściwości, który kopiujesz do klasy przez `use TraitName;`. Poznaj używanie kilku traitów, rozwiązywanie konfliktów nazw przez `insteadof` i `as`, abstrakcyjne i statyczne elementy traitów, kolejność pierwszeństwa metod oraz trait vs interfejs vs klasa abstrakcyjna.
- EnumyEnum w PHP (8.1+) to typ ze stałą listą wartości: `enum Status: string { case Active = 'active'; }`. Poznaj enumy czyste i z wartościami (backed), `->value` i `->name`, konwersję przez `from()` i `tryFrom()`, listę przypadków przez `cases()`, metody, stałe, interfejsy i enumy w `match`.
- Metody statyczneMetoda lub właściwość `static` należy do klasy, a nie do obiektu: metodę wywołujesz przez `ClassName::method()`, a właściwość czytasz przez `ClassName::$count`, bez `new`. Poznaj `self::` vs `static::` (późne wiązanie statyczne), `new static`, zmienne statyczne w funkcjach i sytuacje, w których static to złe narzędzie.
- Przestrzenie nazwPrzestrzeń nazw w PHP grupuje klasy, funkcje i stałe pod prefiksem: `namespace App\Models;` na górze pliku, a potem `use App\Models\User;` w innym miejscu, aby odwoływać się do klasy krótką nazwą. Poznaj nazwy w pełni kwalifikowane, aliasy `use ... as`, `use function`, początkowy ukośnik wsteczny dla klas globalnych i autoloading PSR-4.
Błędy i wyjątki
- try catchW PHP kod, który może zawieść, trafia do bloku `try { }`, a `catch (Exception $e) { }` wykonuje się, gdy coś zostanie rzucone, z przyczyną w `$e->getMessage()`. Poznaj przechwytywanie kilku typów wyjątków, `finally`, powód, dla którego `catch (Exception)` nie łapie `TypeError` i `DivisionByZeroError` (łap `Throwable`), ponowne rzucanie i globalny handler.
- WyjątkiWyjątek w PHP rzucasz przez `throw new Exception('message');`, a wywołujący odczytuje go przez `$e->getMessage()` w bloku `catch`. Poznaj wbudowane klasy wyjątków, pisanie własnych wyjątków, `getCode()`, `getLine()` i `getPrevious()`, `throw` jako wyrażenie oraz błędy rzucane przez samo PHP, takie jak `ValueError` i `TypeError`.
Dane, pliki i sieć
- json_encode()json_encode($value) zamienia tablicę, obiekt lub wartość skalarną PHP w string JSON. Tablice asocjacyjne stają się obiektami JSON, listy tablicami JSON, a flagi takie jak JSON_PRETTY_PRINT i JSON_UNESCAPED_UNICODE sterują wynikiem.
- json_decode()json_decode($json, true) zamienia string JSON w tablicę asocjacyjną PHP; bez true dostajesz obiekty stdClass. Poznaj zagnieżdżone wartości, obsługę błędów przez JSON_THROW_ON_ERROR, json_validate() i powody, dla których json_decode zwraca null.
- date()date('Y-m-d') zwraca dzisiejszą datę jako string, a date('Y-m-d', $timestamp) formatuje dowolny znacznik czasu Unix. Poznaj time(), mktime(), strtotime(), DateTimeImmutable, dodawanie dni, różnicę między dwiema datami i strefy czasowe, z przykładami do uruchomienia.
- Format datyFormat daty w PHP to string liter takich jak 'Y-m-d H:i:s', gdzie Y to rok czterocyfrowy, m miesiąc, d dzień, H godzina, i minuty, a s sekundy. Tutaj znajdziesz każdy znak formatu z przykładem, a także escapowanie, ISO 8601, japońskie daty i konwersję z jednego formatu na inny.
- file_get_contents()file_get_contents('notes.txt') odczytuje cały plik i zwraca go jako jeden string albo false, jeśli się nie da. Jej odpowiednik file_put_contents() zapisuje string do pliku, a file() zwraca linie jako tablicę.
- fopen()fopen('data.txt', 'r') otwiera plik i zwraca uchwyt albo false przy błędzie. Czytasz z uchwytu przez fgets() lub fread(), zapisujesz przez fwrite(), zamykasz przez fclose(). Tryb ('r', 'w', 'a', 'x', 'c' i ich formy z +) decyduje, co możesz zrobić.
- include i requireinclude 'header.php'; wykonuje w tym miejscu inny plik PHP, tak jakby jego kod został wklejony. require robi to samo, ale zatrzymuje skrypt krytycznym błędem, gdy pliku brakuje, a include tylko ostrzega i działa dalej. include_once i require_once wczytują plik tylko za pierwszym razem.
- FormularzeFormularz PHP wysyła dane do samego siebie przez <form method="post">, a skrypt odczytuje pola z $_POST['name'], gdy $_SERVER['REQUEST_METHOD'] to 'POST'. Poznaj walidację, komunikaty błędów przy polach, zachowanie wpisanych wartości, pola wyboru i listy rozwijane oraz escapowanie wyjścia.
- $_GET i $_POST$_GET zawiera query string adresu URL (?page=2 daje $_GET['page']), a $_POST pola formularza wysłanego z method="post". Naucz się bezpiecznie odczytywać oba, budować linki przez http_build_query, sprawdzać $_SERVER['REQUEST_METHOD'] i wybierać między GET a POST.
- htmlspecialchars()htmlspecialchars($text) zamienia pięć znaków, które mają znaczenie w HTML (& < > " '), na encje, dzięki czemu dane od użytkownika są pokazywane jako tekst, a nie wykonywane jako znaczniki. Poznaj ENT_QUOTES, escapowanie atrybutów, podwójne kodowanie, htmlentities i strip_tags.
- Sesje i ciasteczkaWywołaj session_start() na górze każdej strony, a potem zapisuj wartości w $_SESSION['key']; PHP trzyma je na serwerze i rozpoznaje odwiedzającego po ciasteczku. setcookie('name', 'value', $options) zapisuje małą wartość w przeglądarce, odczytywaną potem z $_COOKIE. Poznaj logowanie, wylogowanie, komunikaty flash, opcje ciasteczek i ustawienia bezpieczeństwa.
- password_hash()Haszuj hasło przez password_hash($password, PASSWORD_DEFAULT), zapisz 60-znakowy wynik i sprawdzaj logowanie przez password_verify($password, $hash). Dowiedz się, dlaczego hash za każdym razem się zmienia, czym jest koszt, password_needs_rehash i Argon2id oraz dlaczego md5 i sha1 nie nadają się do haseł.
- filter_var()filter_var($value, FILTER_VALIDATE_EMAIL) zwraca wartość, jeśli jest poprawna, i false, jeśli nie; FILTER_VALIDATE_INT, FILTER_VALIDATE_URL, FILTER_VALIDATE_BOOL i FILTER_VALIDATE_IP działają tak samo. Poznaj opcje (min_range, default), flagi, filtry oczyszczające i pułapkę false kontra 0.
- PDOPDO to warstwa bazy danych PHP: połącz się przez new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', $user, $pass), a każde zapytanie z wartościami wykonuj przez prepare() i execute([$value]). Poznaj łączenie, zapytania przygotowane, pobieranie wierszy, wstawianie, transakcje i WHERE IN.
- ComposerComposer to menedżer pakietów PHP: composer require vendor/package pobiera bibliotekę do vendor/, zapisuje ją w composer.json, a require 'vendor/autoload.php' ją wczytuje. Naucz się instalować Composera, poznaj composer.json, ograniczenia wersji, install vs update i autoloading PSR-4 dla własnych klas.
Debugowanie i praktyka
- var_dump() i print_r()print_r($array) wypisuje tablicę w czytelnej formie, var_dump($value) pokazuje dodatkowo każdy typ i długość, a var_export wypisuje poprawny kod PHP. Dowiedz się, kiedy używać której, jak dostać print_r jako string i jak ładnie wypisać dane w HTML przez <pre>.
- Pytania rekrutacyjne24 pytania rekrutacyjne z PHP z krótkimi, poprawnymi odpowiedziami dla PHP 8, od == vs === i isset vs empty po referencje w foreach, self vs static, generatory, SQL injection i haszowanie haseł. Większość odpowiedzi ma kod, który możesz uruchomić i zmienić.