← Lekcje
PHP · lekcja 01

Zmienne, typy
i ciągi znaków

Pierwszy własny kod: zmienne · typy · komentarze · sklejanie tekstu

Rozgrzewka · 3 minuty

Co już wiecie?

Zanim napiszemy pierwszą linię PHP, wracamy do tego, co już umiecie o stronach.

  1. Do czego służy HTML i kto go czyta, gdy otwierasz stronę?
  2. Co robi serwer, gdy wpisujesz adres strony w przeglądarce?
PHP Manual: What is PHP? („the code is executed on the server, generating HTML which is then sent to the client”) · php.net/manual/en/intro-whatis.php
Cel lekcji

Po tej lekcji umiesz

Piszemy wszystko razem, na żywo. Po każdym bloku uruchamiacie kod u siebie.

Przepisujemy i uruchamiamy

Zmienne i typy

$name = "Anna";     // string (ciąg znaków)
$age = 18;          // int (liczba całkowita)
$height = 1.72;     // float (liczba z przecinkiem)
$isAdult = true;   // bool (prawda / fałsz)

/* Komentarz na kilka linii
   piszemy tak. */

Typu nie deklarujemy. PHP sam go rozpoznaje po wartości.

Ciekawostka: znak $ przed nazwą zmiennej PHP wziął od Perla. W 1995 roku Rasmus Lerdorf, twórca PHP, zbudował wczesną wersję języka (wtedy nazywaną FI) ze „zmiennymi w stylu Perla”, jak pisze PHP Manual. Ten zapis ze znakiem $ został w PHP do dziś.

PHP Manual: History of PHP, sekcja o wersji FI z 1995 roku (php.net/manual/en/history.php.php)
Zasady

Nazwy zmiennych: 4 zasady

  1. Zawsze zaczynają się od $
  2. Wielkość liter ma znaczenie: $Name to inna zmienna niż $name
  3. Bez spacji i polskich znaków: $studentName, nie $imię ucznia
  4. Po angielsku: $price, nie $cena. Tak wygląda kod w każdej firmie, w polskiej też

Przyjmujemy na wszystkich lekcjach: nazwy angielskie, pierwsze słowo małą literą, każde kolejne wielką (camelCase): $studentName, $isAdult. Tak piszą Laravel, Symfony i większość firm. Po polsku zostają teksty, które widzi użytkownik.

PHP Manual: Variables basics („A valid variable name starts with a letter... or underscore”; „The variable name is case-sensitive”) · php.net/manual/en/language.variables.basics.php
Narzędzie na czas nauki

Co siedzi w zmiennej? var_dump

var_dump($name);       // string(4) "Anna"
var_dump($age);        // int(18)
var_dump($height);     // float(1.72)
var_dump($isAdult);   // bool(true)

var_dump pokazuje typ i wartość. Gdy coś nie działa, to jest Twoje pierwsze narzędzie, nie zgadywanie.

PHP Manual: var_dump („displays structured information about... type and value”) · php.net/manual/en/function.var-dump.php
Najważniejszy slajd dzisiaj

Łączenie tekstu: kropka

echo "Imię: " . $name . ", wiek: " . $age;
// Imię: Anna, wiek: 18

Drugi sposób: zmienna wprost w tekście (interpolacja)

echo "Cześć $name, masz $age lat";   // działa w "..."
echo 'Cześć $name';                  // w '...' NIE działa:
                                        // wypisze: Cześć $name
PHP Manual: String operators, operator sklejania „.” · php.net/manual/en/language.operators.string.php · PHP Manual: Strings („variable names will be expanded” w cudzysłowie podwójnym, brak w pojedynczym) · php.net/manual/en/language.types.string.php
Pułapka

+ to nie .

echo $age + 1;   // 19   (dodawanie liczb)
echo $age . 1;   // 181  (sklejenie tekstu!)

Łączenie tekstu plusem to JavaScript. W PHP tekst łączy kropka. Kto się pomyli, dostaje 181 zamiast 19 i długo szuka błędu.

PHP Manual: String operators („the concatenation operator ('.'), which returns the concatenation of its right and left arguments”) · php.net/manual/en/language.operators.string.php
Zapamiętajcie

Funkcje do ciągów

strlen("Anna")                  // 4 (długość w bajtach)
strtoupper("Anna")              // ANNA
str_replace("A", "O", "Anna")   // Onna
substr("komputer", 0, 3)        // kom

str_replace rozróżnia wielkość liter: zamieniło tylko duże „A”.

PHP Manual: strlen · php.net/manual/en/function.strlen.php · PHP Manual: strtoupper · php.net/manual/en/function.strtoupper.php · PHP Manual: str_replace („This function is case-sensitive”) · php.net/manual/en/function.str-replace.php · PHP Manual: substr · php.net/manual/en/function.substr.php
To wraca na egzaminie

Bajty znaki

strlen("żółć")      // 8  (bajty: polska litera = 2 bajty)
mb_strlen("żółć")   // 4  (znaki)

Do polskiego tekstu używamy funkcji z przedrostkiem mb_ (multibyte): mb_strlen, mb_strtoupper, mb_substr.

PHP Manual: strlen („returns the number of bytes rather than... characters”) · php.net/manual/en/function.strlen.php · PHP Manual: mb_strlen („a multi-byte character is counted as 1”) · php.net/manual/en/function.mb-strlen.php
Ćwiczenie 1 · 6 minut

Ćwiczenie 1: pogoda

  1. W swoim folderze utwórz plik weather.php.
  2. Wpisz trzy zmienne: $city = "Warszawa"; $temperature = 21.5; $isRaining = true;
  3. Jednym echo wypisz zdanie, w którym są wszystkie trzy zmienne.
  4. Otwórz plik w przeglądarce: localhost/weather.php

Ma się pojawić: Miasto: Warszawa, temperatura: 21.5 stopni, pada: 1

Pytanie do zapisania w komentarzu w pliku: dlaczego zamiast true widać 1?

Ćwiczenie 2 · 7 minut

Ćwiczenie 2: paragon

  1. Utwórz plik receipt.php.
  2. Wpisz: $price = 49.99; $quantity = 3; i policz kwotę: $total = $price * $quantity;
  3. Wypisz linię 3 sztuki po 49.99 zł = 149.97 zł, sklejając kawałki kropką .
  4. Wypisz tę samą linię drugi raz, wpisując zmienne wprost w tekst w cudzysłowie "..." (interpolacja).

Ma się pojawić dwa razy to samo: 3 sztuki po 49.99 zł = 149.97 zł. Między liniami wstaw <br>, żeby nie skleiły się w jedną.

Wskazówka

Kwotę liczymy najpierw do $total, bo w cudzysłowie PHP podmienia zmienne, ale nie wykonuje mnożenia.

Ćwiczenie 3 · 7 minut

Ćwiczenie 3: napis

  1. Utwórz plik caption.php i wpisz: $sentence = "PHP jest językiem serwera";
  2. Wypisz cztery rzeczy, każdą w osobnej linii (<br> między nimi):
Co wypisać?Jaką funkcją?Ma się pojawić
liczbę znakówmb_strlen25
zdanie wielkimi literamimb_strtoupperPHP JEST JĘZYKIEM SERWERA
zdanie ze słowem „serwera” zamienionym na „backendu”str_replacePHP jest językiem backendu
pierwsze 3 znakisubstrPHP
Wskazówka

mb_strlen daje 25, zwykłe strlen dałoby 26, bo „ę” zajmuje 2 bajty.

Dla szybkich

Zadanie z gwiazdką

  1. Utwórz plik star.php i wpisz: $text = "Ala ma kota";
  2. Wypisz napis odwrócony, funkcją strrev. Ma się pojawić: atok am alA
  3. Wypisz, ile razy w napisie jest litera „a”, funkcją substr_count. Poprawny wynik: 4

Podpowiedź: „Ala” zaczyna się dużą literą, a substr_count rozróżnia wielkość liter. Zamień najpierw cały napis na małe litery funkcją strtolower.

Wskazówka

strtolower zamienia „Ala” na „ala”, dzięki temu substr_count liczy też duże „A”.

Zanim zawołasz o pomoc

5 najczęstszych błędów

Komunikat błędu podaje linię. Najpierw czytasz, potem pytasz.

Na koniec

Sprawdź się

  1. Czym różni się "..." od '...' przy zmiennych?
  2. Co wypisze echo 5 . 5; a co echo 5 + 5;?
  3. Dlaczego strlen("łąka") to nie 4?

Następna lekcja: tablice.

← → slajdy · F pełny ekran · S spis