2. PHP – Wykład 3
Początkujący programiści mają tendencję do tworzenia dużej liczby tzw. zmiennych tymczasowych, które
nie wnoszą absolutnie niczego do programu poza wydłużeniem kodu i zmniejszeniem wydajności. Po
każdym etapie przetworzenia jakiejś informacji, umieszczana jest ona w nowej zmiennej. Takie podejście
jest nieprawidłowe. Oto przykłady "złych" skryptów:
<?php
$tekst = 'To jest jakiś tekst’;
$tekstMaly = strtolower($tekst);
$tekstBezpieczny = addslashes($tekstMaly);
echo $tekstBezpieczny;
Przykład 2:
<?php
$format = 'd.m.Y’;
echo date($format);
3. PHP – Wykład 3
W pierwszym skrypcie niepotrzebnie po każdym etapie przetwarzania tekstu tworzymy dla niego nową
zmienną. Możemy to poprawić na dwa sposoby.
Pierwszy:
<?php
$tekst = 'To jest jakiś tekst’;
$tekst = strtolower($tekst);
$tekst = addslashes($tekst);
echo $tekst;
Drugi sposób rozwiązania tego problemu - bez użycia zmiennych (już trochę mniej czytelny):
<?php
echo addslashes(strtolower('To jest jakiś tekst’));
W drugim "złym" skrypcie w ogóle niepotrzebnie tworzymy zmienną - format daty możemy wpisać
bezpośrednio do funkcji.
<?php
echo date('d.m.Y');
4. PHP – Wykład 3
Więcej o operatorach
Dotychczas poznałeś już kilka operatorów, np. + czy =. Jak zdążyłeś już zauważyć, po obu stronach
takiego operatora stoją wyrażenia, na których wykonuje on operacje i zwraca wynik. Sam jest zatem
wyrażeniem. Operatory mają określoną kolejność wykonywania wzorowaną na matematyce. Możemy
ją naginać do własnych potrzeb, stosując nawiasy.
5. PHP – Wykład 3
Więcej o operatorach
Zwróć uwagę na cztery ostatnie pozycje. Wyszczególnione zostały tam tzw. operatory
jednoargumentowe, czyli takie, które operują wyłącznie na jednym wyrażeniu. W dodatku
koniecznie musi być ono zmienną, ponieważ modyfikują one jej wartość, powiększając lub
zmniejszając o jeden. Każdy z tych operatorów został podany podwójnie, ponieważ w zależności od
tego, czy postawimy go przed, czy po zmiennej, otrzymamy nieco inne rezultaty. Porównaj:
<?php
// najpierw składnia $zmienna++
$zmienna = 5;
echo 'Stan 1: '.($zmienna++).'<br/>’;
echo 'Stan 2: '.$zmienna.'<br/><br/>’;
// teraz składnia ++$zmienna
echo 'Restart zmiennej...<br/>’;
$zmienna = 5;
echo 'Stan 1: '.(++$zmienna).'<br/>’;
echo 'Stan 2: '.$zmienna.'<br/>';
6. PHP – Wykład 3
Aby ułatwić modyfikację wartości zmiennych o liczby inne niż jeden, stworzono całą gamę
operatorów łączących w sobie przypisywanie oraz jakąś operację matematyczną. Oto i one:
7. PHP – Wykład 3
Te operatory po prostu skracają zapis i czynią go czytelniejszym. Warto o nich pamiętać szczególnie przy
operacjachna ciągach tekstu, kiedy nasz algorytm składa jakąś treść, doczepiając kolejne jej partie do
wybranej zmiennej:
<?php
$tekst = 'Litwo, ojczyzno moja! Ty jesteś jak zdrowie<br/>’;
$tekst .= 'Ile Cię trzeba cenić, ten tylko się dowie<br/>';
$tekst .= 'Kto Cię stracił, dziś piękność twą w całej ozdobie<br/>’;
$tekst .= 'Widzę i opisuję, bo tęsknię po tobie.<br/>’;
echo $tekst;
8. PHP – Wykład 3
Zaznajomimy się teraz z tablicami, pierwszym złożonym typem danych. Cofnijmy się do czasów szkoły
podstawowej/gimnazjum na lekcję matematyki i przypomnijmy nasz pierwszy kontakt z pojęciem funkcji.
Była tam mowa, że funkcję można przedstawiać w postaci tabelki:
x 0 1 2 3 4 5 6 7 8
y 5 3 8 7 9 24 15 2 19
Spróbujmy przenieść taką tabelkę w świat programowania. Widzimy, że wszystkie "igreki" są ze sobą
powiązane, ponieważ wszystkie są możliwymi wynikami funkcji. Gdyby to zapisać jako zupełnie osobne
zmienne, mielibyśmy problem z późniejszym dostaniem się do nich. Popatrz na to w ten sposób:
użytkownik wprowadza argument, a my mamy dla niego odnaleźć wartość spośród tych podanych. Skąd
PHP może wiedzieć, że akurat ta grupa zmiennych jest ze sobą w jakiś sposób powiązania, a tym bardziej
znać regułę wybierania "tej właściwej"? Na razie nie jest to w ogóle możliwe. Co nam pozostaje? Zapisać
wszystkie wartości w strukturze zwanej tablicą.
9. PHP – Wykład 3
Wiemy już, że tablica jest zmienną, która grupuje sobie mniejsze zmienne opisywane przez ich indeksy
(wartości x w naszej tabelce funkcji). Najważniejsze jest jednak to, że przy odwoływaniu się do nich,
potrzebny nam indeks możemy określić zwyczajnym wyrażeniem! Zanim je zaprogramujemy, nieco
informacji o składni tablic. Na początek utwórzmy pustą tablicę:
<?php
$tablica = array();
Spróbujmy wprowadzić do niej wartości naszej funkcji:
<?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
Początkowe "0" określa, od jakiej liczby zacząć numerowanie kolejnych elementów. Po strzałce
wymieniamy ich wartości oddzielone przecinkiem. Należy pamiętać, że PHP (tak jak wiele popularnych
języków programowania) zaczyna numerację zmiennych (indeksów) w tablicy od 0. Dlatego też możemy
śmiało pominąć zapis 0 =>.
10. PHP – Wykład 3
<?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
echo 'Pod numerem 5 kryje się wartość '.$tablica[5];
Pomiędzy nawiasami kwadratowymi wprowadzić musimy wyrażenie określające indeks tablicy, który
chcielibyśmy odczytać. Możemy teraz pokusić się o napisanie skryptu losującego elementy:
<?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
$liczba_losowa = rand(0, 8);
echo 'Pod numerem '.$liczba_losowa.' kryje się wartość '.$tablica[$liczba_losowa];
W tym skrypcie za wybranie indeksu tablicy odpowiada funkcja rand() zwracająca losową wartość z
tablicy.
11. PHP – Wykład 3
Indeksy tablicy wcale nie muszą być numeryczne. PHP dopuszcza także tekstowe wersje. Mamy wtedy do
czynieniaz tablicami asocjacyjnymi.
<?php
$artykul = array( 'tytul' => 'Tytuł artykułu', 'data' => date('d.m.Y'), 'tresc' => 'To jest treść artykułu’);
echo '<h1>'.$artykul['tytul'].'</h1>’;
echo '<p>Napisany dnia '.$artykul['data'].'</p>’;
echo '<p>'.$artykul['tresc'].'</p>';
12. PHP – Wykład 3
Najpierw przypisaliśmy do losowego indeksu tablicy nową wartość: 6. Całość wyświetlamy funkcją
var_dump() aby pokazać do którego indeksu wartość została dopisana. Przy okazji var_dump pokazuje
typy danych.
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
// modyfikuj losowy element tablicy
$tablica[rand(0, 8)] = 6;
var_dump($tablica);
14. PHP – Wykład 3
Funkcje
Funkcje są pojęciem znanym z matematyki. Przeniesione na grunt informatyki, zachowują się
podobnie i mają podobne zastosowanie: reprezentują jakieś przekształcenie, jakie można wykonać na
danych. Dane wejściowe, czyli patrząc na definicję - element zbioru X - wymieniamy jako argumenty
funkcji, a po jej wykonaniu otrzymujemy wynik, czyli element zbioru Y. W matematyce jedną z
najbardziej znanych funkcji jest sinus, który dla każdej wartości kąta "produkuje" stosunek długości
odpowiednich boków w trójkącie prostokątnym zawierających ten kąt. Sinus może być jak najbardziej
poprawną funkcją w PHP (i rzeczywiście, język ten udostępnia programiście funkcję sin()), ale ponieważ
programy wykonują dużo więcej różnorodnych operacji, możemy spotkać również bardziej
praktyczne funkcje z punktu widzenia generowania stron WWW, np. strip_tags(), która z podanego
tekstu usuwa znaczniki HTML. Oprócz tego, programista może samodzielnie tworzyć własne funkcje.
15. PHP – Wykład 3
Tworzenie własnych funkcji
Każda funkcja musi posiadać pewną unikalną nazwę, która pozwoli odróżnić ją od innych. Musimy także
określić, jakie argumenty przyjmuje i co właściwie robi. Odpowiada za to następująca konstrukcja:
function nazwaFunkcji(argumenty)
{
// kod funkcji
}
Od tego miejsca możemy wywoływać naszą funkcję w identyczny sposób, jak te dostępne w PHP.
<?php
function formatujTekst($tekst)
{
echo '<font color="red">'.strtoupper($tekst).'</font>';
}
formatujTekst('to jest tekst 1’);
formatujTekst('to jest tekst 2’);
Stworzyliśmy tutaj funkcję formatujTekst(), dzięki której ustalimy jednolite formatowanie dla
tekstów prezentowanych na stronie.
Pobiera ona jeden argument: $tekst.
16. PHP – Wykład 3
Gdybyśmy chcieli podać więcej argumentów, oddzielamy je od siebie przecinkami. Jeżeli funkcja nie
będzieużywać żadnego argumentu, za nazwą pozostawiamy puste nawiasy. Abyśmy mogli z
argumentów skorzystać, muszą one mieć swoje nazwy, gdyż wewnątrz funkcji stają się zwykłymi
zmiennymi. Kod funkcji jest dowolnym poprawnym kodem PHP i można w nim umieścić dowolną rzecz, z
tworzeniem kolejnej funkcji włącznie. Jednak zauważmy, że nasza pierwsza funkcja nie zwraca wartości.
Zamiast tego wynik wysyła odrazu na ekran i próba wykonania
$zmienna = formatujTekst('to jest tekst 1’);
nic by nam nie dała.
Aby zwrócić cokolwiek jako wynik, musimy skorzystać z komendy return:
<?php
function formatujTekst($text)
{
return '<font color="red">'.strtoupper($text).'</font>';
}
echo formatujTekst('to jest tekst 1').'<br/>’;
echo formatujTekst('to jest tekst 2').'<br/>’;
Po return podajemy wyrażenie generujące wartość do zwrócenia.
17. PHP – Wykład 3
Rekurencja:
function wypisz($tekst, $ile)
{
echo $ile.': '.$tekst.'<br/>’;
if($ile > 0)
{
wypisz($tekst, $ile - 1);
}
}
wypisz('Witaj', 30);
Demonstruje on pewną właściwość rekurencji - możemy nią zastąpić pętle, odpalając naszą funkcję
rekurencyjnie określoną liczbę razy. Jako licznik służy nam wartość argumentu $ile. Gdy jest ona większa
od zera, funkcja wywołuje samą siebie, zmniejszając go o 1, aż dojdziemy do zera. Nie ma w tym nic
dziwnego. Takie rozumienie funkcji jest podstawą tzw. programowania funkcyjnego.
18. PHP – Wykład 3
Rekurencja:
function wypisz($tekst, $ile)
{
echo $ile.': '.$tekst.'<br/>’;
if($ile > 0)
{
wypisz($tekst, $ile - 1);
}
}
wypisz('Witaj', 30);
Demonstruje on pewną właściwość rekurencji - możemy nią zastąpić pętle, odpalając naszą funkcję
rekurencyjnie określoną liczbę razy. Jako licznik służy nam wartość argumentu $ile. Gdy jest ona większa
od zera, funkcja wywołuje samą siebie, zmniejszając go o 1, aż dojdziemy do zera. Nie ma w tym nic
dziwnego. Takie rozumienie funkcji jest podstawą tzw. programowania funkcyjnego.