SlideShare a Scribd company logo
1 of 18
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);
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');
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.
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/>';
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:
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;
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ą.
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 =>.
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.
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>';
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);
PHP – Wykład 3
Wyświetlanie zawartości tablic asocjacyjnych:
$tablica["imie"] = "Jan";
$tablica["nazwisko"] = "Kowalski";
$tablica["adres"] = "Polna 1";
while( list($klucz, $wartosc) = each($tablica) )
echo "$klucz : $wartosc<BR>";
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.
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.
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.
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.
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.

More Related Content

What's hot

Przekierowanie strumienia danych
Przekierowanie strumienia danychPrzekierowanie strumienia danych
Przekierowanie strumienia danychJacek Tomczak
 
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresLexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresBrainhub
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPPiotr Gabryjeluk
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.Semihalf
 
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...The Software House
 
ZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHPZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHPzamcamp
 
Poznaj wp-config.php "Ukryte" możliwości.
Poznaj wp-config.php  "Ukryte" możliwości.Poznaj wp-config.php  "Ukryte" możliwości.
Poznaj wp-config.php "Ukryte" możliwości.Marcin Jóźwiak
 
ZamCamp - Ciekawe sposoby debugowania kodu
ZamCamp - Ciekawe sposoby debugowania koduZamCamp - Ciekawe sposoby debugowania kodu
ZamCamp - Ciekawe sposoby debugowania koduzamcamp
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyJavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyRafal Piekarski
 
SAREscript w praktyce Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
SAREscript w praktyce  Tomasz Kusy SARE - Konferencja E-mail Marketing 2010SAREscript w praktyce  Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
SAREscript w praktyce Tomasz Kusy SARE - Konferencja E-mail Marketing 2010SARE
 
Linux command line - Przewodnik
Linux command line - PrzewodnikLinux command line - Przewodnik
Linux command line - PrzewodnikOskar Wycislak
 
Professional Javascript for Developers
Professional  Javascript for DevelopersProfessional  Javascript for Developers
Professional Javascript for DevelopersRule_Financial
 
React Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + WebsocketsReact Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + WebsocketsThe Software House
 
WordPress 4.0 - co nowego dla programistów?
WordPress 4.0 - co nowego dla programistów?WordPress 4.0 - co nowego dla programistów?
WordPress 4.0 - co nowego dla programistów?Tomasz Dziuda
 
TypeScript as a runtime error terminator
TypeScript as a runtime error terminatorTypeScript as a runtime error terminator
TypeScript as a runtime error terminatorThe Software House
 
Analizy Przestrzenne z wykorzystaniem GRASS vol.15
Analizy Przestrzenne z wykorzystaniem GRASS vol.15Analizy Przestrzenne z wykorzystaniem GRASS vol.15
Analizy Przestrzenne z wykorzystaniem GRASS vol.15WGUG
 
Bash 2 ----- wykład3i4
Bash 2   -----      wykład3i4Bash 2   -----      wykład3i4
Bash 2 ----- wykład3i4kkk112
 

What's hot (20)

Przekierowanie strumienia danych
Przekierowanie strumienia danychPrzekierowanie strumienia danych
Przekierowanie strumienia danych
 
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresLexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closures
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHP
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
 
ZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHPZamCamp #6 - Najczęstsze błędy w PHP
ZamCamp #6 - Najczęstsze błędy w PHP
 
Podstawy PHP
Podstawy PHPPodstawy PHP
Podstawy PHP
 
Poznaj wp-config.php "Ukryte" możliwości.
Poznaj wp-config.php  "Ukryte" możliwości.Poznaj wp-config.php  "Ukryte" możliwości.
Poznaj wp-config.php "Ukryte" możliwości.
 
ZamCamp - Ciekawe sposoby debugowania kodu
ZamCamp - Ciekawe sposoby debugowania koduZamCamp - Ciekawe sposoby debugowania kodu
ZamCamp - Ciekawe sposoby debugowania kodu
 
Lambdy strumienie
Lambdy strumienieLambdy strumienie
Lambdy strumienie
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypyJavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
 
SAREscript w praktyce Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
SAREscript w praktyce  Tomasz Kusy SARE - Konferencja E-mail Marketing 2010SAREscript w praktyce  Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
SAREscript w praktyce Tomasz Kusy SARE - Konferencja E-mail Marketing 2010
 
Linux command line - Przewodnik
Linux command line - PrzewodnikLinux command line - Przewodnik
Linux command line - Przewodnik
 
Professional Javascript for Developers
Professional  Javascript for DevelopersProfessional  Javascript for Developers
Professional Javascript for Developers
 
React Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + WebsocketsReact Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + Websockets
 
WordPress 4.0 - co nowego dla programistów?
WordPress 4.0 - co nowego dla programistów?WordPress 4.0 - co nowego dla programistów?
WordPress 4.0 - co nowego dla programistów?
 
TypeScript as a runtime error terminator
TypeScript as a runtime error terminatorTypeScript as a runtime error terminator
TypeScript as a runtime error terminator
 
Analizy Przestrzenne z wykorzystaniem GRASS vol.15
Analizy Przestrzenne z wykorzystaniem GRASS vol.15Analizy Przestrzenne z wykorzystaniem GRASS vol.15
Analizy Przestrzenne z wykorzystaniem GRASS vol.15
 
Bash 2 ----- wykład3i4
Bash 2   -----      wykład3i4Bash 2   -----      wykład3i4
Bash 2 ----- wykład3i4
 

Similar to Prezentacja php3

Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaMaciej Ziarko
 
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Szymon Stępniak
 
Laravel workshops 1
Laravel workshops 1Laravel workshops 1
Laravel workshops 1Kamil Fojuth
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...Trójmiejska Grupa Testerska
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)adamhmetal
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpadamhmetal
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
Najczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPNajczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPPHPstokPHPstok
 
Standardy programowania... Czyli co poza PSR-x
Standardy programowania... Czyli co poza PSR-xStandardy programowania... Czyli co poza PSR-x
Standardy programowania... Czyli co poza PSR-xLaravel Poland MeetUp
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
 
Programowanie funkcyjne w Pythonie
Programowanie funkcyjne w PythonieProgramowanie funkcyjne w Pythonie
Programowanie funkcyjne w PythonieAdam Byrtek
 
Techniki kompilacji
Techniki kompilacjiTechniki kompilacji
Techniki kompilacjiPiotr B
 
Jarorcon Sp
Jarorcon SpJarorcon Sp
Jarorcon Spjarorcon
 

Similar to Prezentacja php3 (20)

Programowanie
ProgramowanieProgramowanie
Programowanie
 
Programowanie
ProgramowanieProgramowanie
Programowanie
 
Php5
Php5Php5
Php5
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
 
Laravel workshops 1
Laravel workshops 1Laravel workshops 1
Laravel workshops 1
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty php
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Najczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHPNajczęstsze błędy początkujących programistów PHP
Najczęstsze błędy początkujących programistów PHP
 
Standardy programowania... Czyli co poza PSR-x
Standardy programowania... Czyli co poza PSR-xStandardy programowania... Czyli co poza PSR-x
Standardy programowania... Czyli co poza PSR-x
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 
Programowanie funkcyjne w Pythonie
Programowanie funkcyjne w PythonieProgramowanie funkcyjne w Pythonie
Programowanie funkcyjne w Pythonie
 
Techniki kompilacji
Techniki kompilacjiTechniki kompilacji
Techniki kompilacji
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Torquebox
TorqueboxTorquebox
Torquebox
 
Jarorcon Sp
Jarorcon SpJarorcon Sp
Jarorcon Sp
 

Prezentacja php3

  • 1.
  • 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);
  • 13. PHP – Wykład 3 Wyświetlanie zawartości tablic asocjacyjnych: $tablica["imie"] = "Jan"; $tablica["nazwisko"] = "Kowalski"; $tablica["adres"] = "Polna 1"; while( list($klucz, $wartosc) = each($tablica) ) echo "$klucz : $wartosc<BR>";
  • 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.