Funkcje wbudowane 2/2: gotowe funkcje na liczby i typy
Dzisiaj kończycie temat funkcji wbudowanych:
Na poprzedniej lekcji poznaliście funkcje gotowe na tekst - dziś kolej na liczby i typy danych
Trzy funkcje: round() (zaokrąglanie), var_dump() (pokazuje typ zmiennej), date() (format daty i czasu)
var_dump() pokazuje coś, czego nie widać w zwykłym echo: typ zmiennej
Ćwiczenie: number-functions.php z zaokrąglaniem, typami i datą
Rozgrzewka · 3 minuty
Rozgrzewka: funkcje na tekst
Co zwróci trim(" Ala ma kota ")?
W jakiej kolejności str_replace() przyjmuje argumenty: czego szuka, na co zamienia, w czym szuka?
Czym różni się funkcja wbudowana od funkcji, którą sami zdefiniowaliście na wcześniejszych lekcjach?
Część 1 · Funkcja, co robi, przykład
Trzy funkcje na liczby i typy
Samych funkcji na liczby (dziedzina „Math Functions”) jest w PHP kilkadziesiąt - od abs() do sqrt(). Ciekawostka z PHP Manual: round() ma trzeci argument z trybem zaokrąglania - domyślny PHP_ROUND_HALF_UP zaokrągla dokładną połowę w górę (2,5 → 3), a PHP_ROUND_HALF_EVEN zaokrągla 1,5 i 2,5 oba do 2, do najbliższej liczby parzystej.
PHP Manual: przegląd funkcji na liczby, function.round.php, function.var-dump.php, function.date.php · php.net/manual/en/ref.math.php · ciekawostka: „Rounds num towards the nearest even value when it is half way there, making both 1.5 and 2.5 into 2” · php.net/manual/en/function.round.php
Część 2 · round() zaokrągla liczbę
round(): próg w połowie drogi
Tak jak kasjer: 4,50 zł zaokrągla w górę do 5 zł, a 4,49 zł w dół do 4 zł. Drugi argument round($num, $precision) ustala liczbę miejsc po przecinku - domyślnie 0.
PHP Manual: „Returns the rounded value of num to specified precision… precision can also be negative or zero (default)” · php.net/manual/en/function.round.php
Część 3 · var_dump() pokazuje typ i wartość
var_dump(): typ obok wartości
Ta sama piątka może być liczbą (5) albo napisem w cudzysłowie ("5") - w echo wyglądają tak samo, var_dump() pokazuje różnicę.
PHP Manual: „This function displays structured information about one or more expressions that includes its type and value” · php.net/manual/en/function.var-dump.php
Część 4 · date() i litery formatu
date(): litera → co pokazuje
Wasz kod: date("d.m.Y") dla przykładowej chwili → 15.06.2030. Litery sami wybieracie, PHP tylko podstawia wartości.
1. Które wywołanie funkcji PHP round() zwróci wartość 1?
round(0.29)
round(0.60)
round(-1.40)
round(-4.60)
2. Program PHP wyświetla aktualny czas w postaci godzina:minuta:sekunda, np. 15:38:20. Czas sformatowany w ten sposób zostanie zwrócony przez funkcję
date("H:i:s");
date("G:m:s");
time("H:i:s");
time("G:m:s");
CKE, EE.09, styczeń 2023, zadanie 7 · CKE, EE.09, styczeń 2022, zadanie 12 (bank pytań, przedmiot strony, temat php)
Ćwiczenie przy komputerze · 20 minut
Ćwiczenie: number-functions.php
W folderze swojego serwera (np. htdocs) utwórz plik number-functions.php.
Zapisz do $a wynik round(4.5), do $b wynik round(4.49) i wypisz obie wartości.
Utwórz $intValue = 5;, $floatValue = 4.5;, $stringValue = "5"; i wywołaj var_dump() dla każdej.
Wypisz echo date("d.m.Y"); - pokaże dzisiejszą datę w Twoim formacie.
Sprawdź w przeglądarce pod localhost/number-functions.php - mają się pojawić wszystkie wyniki.
Ma się pojawić:5, potem 4, potem int(5), float(4.5), string(1) "5", na końcu dzisiejsza data w formacie DD.MM.RRRR.
Bonus, jeśli starczy czasu: dopisz var_dump(is_int($stringValue)); i echo gettype($stringValue); - sprawdź, co wypisze, mimo że $stringValue wygląda jak liczba.
Zasady pracowni
Na koniec
Sprawdź się
Ile wynosi round(4.49), a ile round(4.5)? Dlaczego wyniki są różne, mimo że różnica argumentów to tylko 0,01?
Co pokazuje var_dump(), czego nie pokazuje zwykłe echo?
Skąd date() wie, jakie litery użyć do dnia, miesiąca i roku?
To była ostatnia lekcja tematu funkcji wbudowanych - na następnej: programowanie obiektowe, klasy i obiekty.
Poza szkołą
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
round() na liczbie zmiennoprzecinkowej (float)
Przy liczeniu pieniędzy liczby zmiennoprzecinkowe są ryzykowne (błędy zaokrąglenia). PHP Manual zaleca liczenie w najmniejszej jednostce (np. groszach) jako liczbach całkowitych.
nadal w użyciu (obie metody, zależnie od zastosowania)
var_dump() wypisywany wprost do przeglądarki
Debugowanie zwykle idzie przez narzędzia typu Xdebug albo widok zmiennych wbudowany w edytor, bez zaśmiecania działającej strony.
nadal w użyciu (jako szybki podgląd)
date() zwraca datę według strefy czasowej serwera
Produkcyjne aplikacje ustawiają strefę czasową jawnie (date_default_timezone_set() albo klasy DateTime/DateTimeImmutable), żeby data nie zależała od domyślnych ustawień serwera.
nadal w użyciu
PHP Manual: „Floating-point numbers have limited precision… never trust floating-point number results to the last digit” · php.net/manual/en/language.types.float.php