Pierwszy odcinek tutoriala PHP – tutaj poznamy absolutne podstawy, dzięki którym będziemy mogli zacząć pisać kod w tym języku.
Zakładam, że PHP mamy zainstalowany (np. posiadamy XAMPP). Teoretycznie można używać kompilatorów online, ale one sprawdzają się tylko w najbardziej podstawowych zadaniach.
Będziemy poznawać PHP, od początku do bardziej zaawansowanych zastosowań.
Na razie podstawy
Localhost, hello world – pierwsze kroki
Odpalamy XAMPP, PHP działa na porcie 80. Wchodzimy do folderu htdocs, tworzymy folder o dowolnej nazwie, unikając spacji.
Ja go nazwałem „myblog2024articles”.
Mając odpalony XAMPP wchodzimy na adres url o nazwie localhost/nazwafolderu.
W moim przypadku jest to „http://localhost/myblog2024articles/”.
Jeżeli wszystko działa powinniśmy dostać listę plików wypisaną, oczywiście plików nie mamy tam żadnych.
Tak działa PHP, gdy serwuje nam folder bez pliku o nazwie index.php.
Możemy stworzyć sobie w tym folderze plik o nazwie hello.txt.
Wpisałem tak jakiś tekst, następnie wszedłem do przeglądarki, odświeżyłem. Nasz plik jest widoczny, a gdy klikniemy go, zostanie nam przez przeglądarkę zaserwowany.
Możemy też odnieść się do niego po adresie, w moim przypadku to „http://localhost/myblog2024articles/hello.txt”.
Oczywiście te pliki nie są „w internecie” tylko lokalnie na naszej maszynie.
Dobra, zróbmy sobie plik o nazwie hello.php w tym folderze, o treści poniższej
<?php
echo "HELLO WORLD";
?>
Jak widać sam typ pliku (.php) nie wystarczy. Kod w PHP musimy zaznaczać na wejście poprzez „<?php” oraz na wyjście poprzez „?>”.
Wewnątrz piszemy kod. Słowo kluczowe echo służy do wypisywania treści na ekranie.
W odróżnieniu od np. Pythona, gdzie nie stawiamy średników po każdym poleceniu, bo mamy wcięcia (choć możemy tego średnika w Pythonie użyć) oraz od języka JavaScript, w którym średniki się powinno używać, ale język ma mechanizm ASI (automatic semicolon insertion), który pozwala nam czasem popełnić błąd, pominąć średnik, a kod i tak się wykona, język PHP jest BEZLITOSNY.
Każde polecenie musi zostać zakończone średnikiem.
Wejdźmy na stronę „http://localhost/myblog2024articles/” (po localhost nazwa naszego folderu), jeżeli będzie trzeba – odświeżamy. Plik hello.php powinien być widoczny.
I powinien działać.
Pierwsza zmienna – znak dolara
Zmienne w PHP tworzymy poprzez znak „$” i nazwę zmiennej. Zmodyfikujemy sobie nasz hello.php:
<?php
$msg = "Hello World";
echo $msg;
?>
W ten sposób wyświetlamy zmienną. Możemy też ją „wrzucić” w podwójny cudzysłów, dostaniemy interpolację:
<?php
$msg = "Hello World";
echo "Our variable: $msg";
?>
To działa tylko, gdy cudzysłów jest podwójny. Pojedynczy po prostu wypisze „Our variable: $msg”, zamiast w miejsce tego dolara dać wartość zmiennej.
Konkatenacja, interpolacja – kropka, dolar
Groźnie brzmiące terminy, w zasadzie bardzo proste czynności.
Stworzymy sobie dwie zmienne i postaramy je dodać do siebie.
<?php
$msg = "Hello";
$name = "John";
echo $msg . " " . $name;
?>
Dodajemy dwie zmienne, ze spacją pomiędzy nimi. To się nazywa konkatenacja. W innych językach programowania zazwyczaj używamy znaku „+”.
W PHP znak „+” jest zarezerwowany to działań matematycznych, zaś napisy dodajemy do siebie przy użyciu operatora konkatenacji „.”
Teraz interpolacja, czyli wrzucenie wartości zmiennej do tekstu (jak f-stringi w języku Python):
<?php
$msg = "Hello";
$name = "John";
echo "$msg, $name!";
?>
Wywołanie funkcji – strtoupper, radnom_int
Wywoływanie funkcji działa tak, jak w innych językach. Przetestujmy to sobie na funkcji strtoupper, która przyjmuje tekst i zwraca go zapisanego wielkimi literami:
<?php
$msg = "Hello World";
echo strtoupper($msg);
?>
Wyświetla nasz tekst wielką literą. Użyjmy innej funkcji.
Funkcja random_int zwraca losową wartość liczbową z podanego zakresu.
<?php
$num = random_int(1, 6);
echo "Your number is $num";
?>
Taka funkcja wylosuje liczbę od 1 do 6 (włącznie) i wypisze ją na ekranie.
Tagi HTML – możliwe w PHP
Możemy wypisywać też tagi HTML. Taki jest cel języka PHP, który służy do tego, aby serwować dane HTML z pewnymi modyfikacjami dokonywanymi przez PHP.
<?php
echo "<h1>Hello Wrold</h1>";
echo "<p>Welcome to my page</p>";
?>
Oczywiście istnieje też inny sposób na wypisywanie HTML. Te „wcięcia” zaczynające i kończące kod PHP służą do tego, aby zagnieżdżać kody PHP wewnątrz HTML.
To znaczy, że poza nimi możemy wypisywać HTML, który przeglądarka dobrze zinterpretuje:
<h1>Hello World</h1>
<p>Welcome to my page</p>
<?php
echo "<p>Lets roll a dice...</p>";
$dice = random_int(1,6);
echo "<p> The dice you rolled is: $dice </p>";
?>
<footer>
<p>
Copyright: My Website <?php echo date("Y"); ?>
</p>
</footer>
Tutaj mamy zwykły kod HTML. Następnie „wcięcie” PHP, wykonujemy jakieś operacje (losowanie liczby, wypisanie jej), następnie „wyskakujemy” z PHP.
Mamy dalej element HTML footer, następny o nazwie <p> (paragraf), gdzie daliśmy sobie informację Copyright oraz małe PHPowe wcięcie, które pokazuje rok, jaki teraz mamy.
PHP służy do tworzenia stron internetowych z tzw. backendem i musimy znać HTML, aby posługiwać się PHP.
Ale tego możemy się szybko i łatwo nauczyć.
Nasz index.php – HTM + PHP
W naszym folderze musimy utworzyć plik, o nazwie index.php. I wrzucić do niego szablon typowego HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
Teraz jak wejdziemy na nasz adres, w moim przypadku „http://localhost/myblog2024articles/” to informacja o plikach w katalogu (takich jak hello.php czy hello.txt, które utworzyliśmy” nam zniknie.
Zamiast tego serwowany będzie domyślnie plik index.php, zawierający naszą templatkę.
Oczywiście to nie oznacza, że pliki te są niedostępne – linki „http://localhost/myblog2024articles/hello.txt” oraz „http://localhost/myblog2024articles/hello.php” nadal działają, ponieważ są w „publicznym” czyli serwowanym użytkownikowi folderze.
Natomiast posiadając plik index.php mamy to „wejście”, które jest serwowane np. po wpisaniu naszej domeny. Tutaj akurat bawimy się lokalnie, ale gdyby to przenieść do internetu, to po wpisaniu „www.naszadomena” to plik „index.php” będzie serwowany na wejściu.
A jeżeli takiego pliku nie mamy – plik „index.html”. Ale my kodujemy w PHP, nie piszemy proste HTMLowe stronki.
Dodajmy do naszego index.php jeszcze jakiś element PHP. Niech to będzie stopka z datą w postaci aktualnego roku:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello World</h1>
<footer>
<p>
Copyright: My Website <?php echo date("Y"); ?>
</p>
</footer>
</body>
</html>
Po odświeżeniu powinno zadziałać, i pokazać rok.
Pętla for, tag </br>, nl2br, \n, tag <pre> – entery
Teraz pominiemy sobie niektóre elementy HTML, pokazaliśmy, jak stworzyć poprawnie stronę internetową zawierającą i HTML i PHP, ale do naszych ćwiczeń użyjemy sobie uproszczonej wersji.
Zróbmy sobie taki oto kod (np. w naszym index.php):
<h1>Hello World</h1>
<h2>Hello World</h2>
<h3>Hello World</h3>
<h4>Hello World</h4>
<h5>Hello World</h5>
<h6>Hello World</h6>
To nagłówki HTML o różnej wielkości, od 1 do 6 (najmniejsze).
Teraz chcemy sobie je wypisać, ale w pętli. Pętla for działa tak:
<?php
for($num = 1; $num <=6; $num++){
echo $num;
}
Dodam, że znaku „kończącego” PHP używać nie musimy. Wtedy uznajemy, że wszystko poniżej „<?php” to kod PHP.
Tutaj wypisało nam numery od 1 do 6.
Stworzyliśmy zmienną num o wartości 1 (blok init).
Podaliśmy warunek, że pętla ma chodzić tak długo, jak num jest mniejsze lub równe 6 (blok condition)
Nakazaliśmy zwiększyć num o 1 przy każdej iteracji (blok iteration).
Wewnątrz pętli, oplecionej nazwiasami { } wypisujemy naszą zmienną.
Każda pętla for wygląda w ten sposób. Słówko for, blok init (czyli co na początku), blok condition (czyli warunek) i blok mówiący o tym, co mamy wykonać co każdy obrót pętli (zwiększyć num o 1 czyli $num++).
Tak wyglądają klasyczne pętle for.
Teraz tylko musimy oddzielić te liczby jakimś „enterem”.
Jako że pracujemy z HTML, użyjemy tagu „</br>” czyli breakline.
<?php
for($num = 1; $num <=6; $num++){
echo $num . "</br>";
}
Teraz mamy te liczby „od entera”.
Możemy też ten enter zapisać „po Bożemu” czyli korzystając z PHP_EOL (end-of-line, znak nowej linii):
<?php
for($num = 1; $num <=6; $num++){
echo $num . PHP_EOL;
}
Niestety, jesteśmy w stronie internetowej serwowanej de-facto jako obrobiony przez PHP kod HTML. Znak nowej linii zastąpiło nam spacją.
Potrzebna jest nam funkcja nl2br (new line to break line) zamieniająca PHP_EOL na tag „</br>”
<?php
for($num = 1; $num <=6; $num++){
echo nl2br($num . PHP_EOL);
}
Znak nowel linii możemy zapisać też tak, ale to może być problematyczne (różne systemy operacyjne mają różne „entery”):
<?php
for($num = 1; $num <=6; $num++){
echo nl2br("$num\n");
}
Znak „\n” podobnie jak w języku Python oznacza newline, nową linię. Natomiast nl2br zamienia nową linię na tag „</br>” rozumiany przez przeglądarki.
Mamy też trzecią opcję, jaką jest tag <pre>, który zachowuje „entery”:
<?php
echo "<pre>";
for($num = 1; $num <=6; $num++){
echo "$num\n";
}
echo "</pre>";
Trochę to dziwnie wygląda, ale czasem z tego tagu korzystać będziemy.
Opcja czwarta to umieszczanie naszych danych w tagu HTML, który działa tak (nie każdy oczywiście), że po jego zakończeniu „z automatu” dostajemy enter:
<?php
for($num = 1; $num <=6; $num++){
echo "<p>$num</p>";
}
Jak widać nie tylko „enter” dostaliśmy, także pewne domyślne style CSS, które sprawiają, że tagi mają pewien odstęp, pewien margines od siebie.
To nie jest kurs CSS (choć jeśli nie znamy, poznamy bardzo łatwo), ale możemy sobie nad PHP dodać jakieś style:
<style>
p {
margin: 0;
color: tomato;
font-size: 16px;
font-weight: bold;
}
</style>
<?php
for($num = 1; $num <=6; $num++){
echo "<p>$num</p>";
}
Ok, teraz wykonajmy nasze zadanie, czyli wypiszmy w pętli wszystkie możliwe tagi <h1>:
<style>
h1{
color: tomato;
}
h2 {
color: goldenrod;
}
h3 {
color:blueviolet;
}
</style>
<?php
for($num = 1; $num <=6; $num++){
echo "<h$num>Hello World!</h$num>";
}
Pokusiłem się o nadanie pierwszym trzem tagom kolorów, natomiast w sekcji PHP wypisaliśmy tagi od <h1> do <h6> w pętli.
Żadnych tam „enterów” dodawać nie musieliśmy, bo „enter” jest domyślnie dodawany po wypisaniu tagu takiego jak np. „<h1>”.
Wiem, że to może być strasznie upierdliwe na początku, ale trzeba się z tymi różnymi małymi dziwactwami PHP i HTML obyć.
Ćwiczenie – losowy nagłówek, funkcje w PHP
Napiszmy sobie dla przećwiczenia kod, który będzie generował losowy nagłówek od h1 do h6 z napisem „Hello World”.
<?php
$num = random_int(1,6);
echo "<h$num>Hello World</h$num>";
Ten kod generuje losowy tag od <h1> do <h6>.
Możemy przeanalizować jego działanie.
Spróbujmy teraz napisać sobie do niego funkcję, która będzie to robić a następnie ją wywołajmy
function random_heading(){
$num = random_int(1,6);
echo "<h$num>Hello World</h$num>";
}
random_heading();
Jak widać, pisanie funkcji w PHP jest proste. Nie używamy znaku dolara, używamy słowa function, w nawiasy klamrowe wrzucamy ciało funkcji.
Funkcję wywołujemy jak w innych językach, po nazwie i z nawiasami.
Zróbmy teraz tak, aby ta funkcja coś zwracała, a nie wypisywała:
<?php
function random_heading(){
$num = random_int(1,6);
return "<h$num>Hello World</h$num>";
}
echo random_heading();
Teraz nasza funkcja zwraca odpowiedni napis, więc musimy wrzucić ją w echo wywołując ją.
Jako że funkcja coś zwraca, możemy przechwycić jej wartość do zmiennej i tę zmienną wypisać:
<?php
function random_heading(){
$num = random_int(1,6);
return "<h$num>Hello World</h$num>";
}
$random_tag = random_heading();
echo "$random_tag";
Można powiedzieć, że opanowaliśmy jakieś podstawy podstaw poruszania się w języku PHP.
W kolejnych odcinkach będziemy kontynuować poznawanie tego języka.