Słowem wstępu.
Kurs ten powstał ze względu na zmieniające się standardy programowania w tym języku, a niestety kursy dostępne w Internecie zazwyczaj nie są aktualizowane. Obecnie chcąc nauczyć się PHP początkujący są skazani na wybrakowane, niezgodne z obecną składnią języka kursy - postaram się pisać wedle składni obowiązującej w PHP 5.6 (docelowo PHP 7) i tłumaczyć jak to zrobić dla starszych wersji.
Programowanie strukturalne
Podstawy podstaw podstaw - typy danych
Zadaniczo w PHP typ danych nie interesuje programisty, ale trzeba wiedzieć jak go prawidłowo zapisać
Komentarze - to nie typ danych, ale później nie będzie lepszej okazji
// komentarz w jednej linii
# j/w
/*
ten komentarz może mieć wiele linii
*/
Typ tekstowy - umieszczamy między znakami ’ lub ".
'dane tekstowe'; // ten tekst nie będzie dodatkowo interpretowany na obecność zmiennych
"$dane tekstowe"; // w tym przypadku tekst zostanie zinterpretowany na obecność zmiennych więc $dane zostanie zastąpiona wartością zmiennej "dane"
Typy liczbowe - piszemy tak jak jest, należy pamiętać tylko, że nie używamy przecinka zastępując go kropką.
102; // int
3.14159; // float
3,14159; // błąd
Tablice - tablice służą do przechowywania wartości tworząc dla nich kontener. Posiadają one klucze i przypisane do nich wartości.
[
'wartość 1', 'wartość 2', 'wartość 3'
]; // pary klucz->wartość będą wyglądać następująco 0 -> 'wartość 1', 1 -> 'wartość 2', 2 -> 'wartość 3'
// tablica asocjacyjna
[
'klucz_1' => 'wartość 1', 'klucz_2' => 'wartość 2', 'klucz_3' => 'wartość 3'
]; // pary klucz->wartość: 'klucz_1' => 'wartość 1', 'klucz_2' => 'wartość 2', itd...
W przypadku tablic asocjacyjnych kluczem może być dowolny typ prosty (string, int, float).
Dla starszy wersji PHP konieczne jest użycie funkcji array().
// aktualnie
['wartosc'];
// starsze wersje
array('wartosc');
Referencje - czyli odniesienie od innych wartości, dalsze wyjaśnienie w części dotyczącej zmiennych.
Podstawy podstaw - zmienne
W języku PHP korzystamy z typowania dynamicznego co oznacza, że typu zmiennej i jej nazwy nie musimy deklarować, dlatego też kod
int intVar = 1
będzię wyglądał następująco
$intVar = 1
Konstrukcja oznacza taka, że od tego momentu zmienna (poprzedzana znakiem $) intVar będzie miała wartość 1.
Bardzo ważne jest także nazewnictwo. Nazwa zmiennej może składać się z znaków a-z, A-Z, 0-9 oraz _, ale pierwszym znakiem w nazwie nie może być liczba.
Prawidłowe nazwy:
$_zmienna; $zmienna; $ZMIENNA; $ZM13NN4;
Błędne nazwy:
$1; $wartość;
Referencje jak już napisałem wcześniej stanowią odniesienie do innych wartości w programie czy do to danych prostych czy obiektów.
$zmienna1 = 1; // 1
$zmienna2 = $zmienna1; // 1
$zmienna2 += 3; // podniesienie wartości zmiennej2 o 3
// wynik: zmienna1 = 1, zmienna2 = 4
$zmienna1 = 1;
$zmienna2 =& $zmienna1;
$zmienna2 += 3;
// wynik: zmienna1 = zmienna2 = 4
Największym plusem jak i minusem zmiennych w PHP (o czym wspomniałem wcześniej) jest dynamiczne typowanie zmiennych - programista nie musi przejmować się czy zmienna ma typ identyczny jak wartość przezeń podawana. Minusy tego stanu rzeczy po kilku chwilach z PHP-em poznacie sami
Funkcje
Kod który planujemy wykorzystać w więcej niż jednym miejscu warto oprogramować jako funkcję - wymagania co do ich nazw są identyczne jak w przypadku nazw zmiennych.
Największym plusem używania funkcji jest zmniejszenie liczby miejsc w których będą zachodzić zmiany w przyszłości.
Kod redundantny:
<?php
$informacje = ['Subject' => 'Nazwa', 'Content' => 'Jakaś treść'];
echo '<h1>'. $informacje['Subject'] .'<h1>';
echo '<p>'. $informacje['Content'] .'</p>';
$nowosc = ['Subject' => 'Nowość!', 'Content' => 'Jakaś treść'];
echo '<h1>'. $informacje['Subject'] .'<h1>';
echo '<p>'. $informacje['Content'] .'</p>';
?>
Wykorzystujący funkcję:
<?php
function wyswietl($subject, $content) {
echo '<h1>'. $subject.'</h1>';
echo '<p>'. $content .'</p>';
}
$informacje = ['Subject' => 'Nazwa', 'Content' => 'Jakaś treść'];
wyswietl($informacje['Subject'], $informacje['Content']);
$nowosc = ['Subject' => 'Nowość!', 'Content' => 'Jakaś treść'];
wyswietl($nowosc['Subject'], $nowosc['Content']);
?>
W przypadku chęci zmiany koloru nagłówka (co powinno się robić CSS-em) wystarczy zmodyfikować kod w jednym miejscu.
<?php
function wyswietl($subject, $content) {
echo '<h1 style="color: red">'. $subject.'</h1>';
echo '<p>'. $content .'</p>';
}
?>
Struktury kontrolne
Do tego momentu zapoznaliśmy się z absolutnymi podstawami - tworzeniem zmiennych i funkcji.
Pozwala to na tworzenie prostych skryptów - głownym problemem będzie brak struktur kontrolnych pozwalających na sterowanie zachowaniem skryptu.
W przypadku struktur zawierających kod przezeń wywoływanych możliwe jest stosowanie podwójnej składni:
struktura_kontrolna {
instrukcje;
}
lub alternatywnie:
struktura_kontrolna:
instrukcje;
endstruktura_kontrolna;
Instrukcja warunkowa IF
Najbardziej podstawowa instrukcja warunkowa to tzw. if/else: if - jeśli, elseif/else if - jeśli ta, ale żadna z poprzednich, else - jeśli żadna inna nie pasuje.
Musimy zacząć jednak od operatorów porównania:
== - równe - należy pamiętać, że w przypadku PHP 1 == “1” będzie prawdziwe,
!= - inne niż - np. 1 != “1”, wróci fałsz,
> - większe,
< - mniejsze,
>= - większe lub równe - zwróć uwagę na definiowanie tablicy,
<= - mniejsze lub równe,
zdawałoby się, że to już wszystko i dajcie wiarę, że są “zawodowi” programiści, którzy tak twierdzą.
Uzupełniamy więc wiedzę:
=== - dokładnie równe - podstawowa różnica: 1 === “1” - fałsz, 1 === 1 - prawda, jak łatwo zauważyć następuje porównanie typów,
!== - inne niż z porównaniem typów - 1 !== “1” - prawda, 1 !== 1 - fałsz.
<?php
if ($x < 5) {
echo 'x mniejsze niż 5';
} elseif ($x == 5) {
echo 'x równe 5';
} else {
echo 'x większe niż 5';
}
?>
składnia alternatywna:
<?php
if (x < 5):
elseif ($x == 5):
else:
endif;
?>
short-if:
<?php
echo $x == 5 ? 'X jest równe 5' : 'X jest inne niż 5';
?>
Instrukcja warunkowa SWITCH
Jeśli IF będzie operował na tej samej zmiennej i jesteśmy w stanie przewidzieć jakie będą wartości dla zmiennej możemy zastosować instrukcję warunkową switch.
W tym przypadku będziemy korzystać ze słów kluczowych:
* case - przypadek, instrukcja wykona się gdy wyrażenie podane do switcha jest jej równe
* break - przerywa wykonywanie switch-a, w przeciwnym przypadku nastąpi przeskok do następnego przypadku
* default - wykonywany jeśli żaden case nie podjął działań
Przykład:
<?php
switch('Jan'){
case 'Asia':
echo 'Cześć Asiu';
break;
case 'Kasia':
case 'Gosia':
echo 'Przejrzałem cię na wskroś Kasiu, Gosiu, czy jakoś tam';
break;
case 'Jan':
echo 'Rączki, rączki Hans';
default:
echo 'A Ty Kochanie kim jesteś?'; // Kochanie przy drodze?
}
?>
Instrukcja WHILE
Jest to pierwszy rodzaj pętli z jakim się zapoznamy.
Głównym zadaniem pętli jest wykonywanie zawartych w nim instrukcji do momentu wystąpienia przerwania, zródła mogą być trzy:
* warunek wykonania - jeśli nie jest spełniony pętla nie wykona kolejnej instrukcji
* break - przerywa całkowicie wykonywanie funkcji od momentu wystąpienia tej instrukcji
* continue - przerywa obecne wykonywanie i przechodzi do następnego skoku
Instrukcje zawarte w pętli while mogą wykonać się zero lub więcej razy - oznacza to, że jeśli nie jest spełniony warunek wejścia w skok pętla nie uruchomi się nawet raz.
Przykład 1:
<?php
$x = 0;
while($x < 3) {
$x++;
if ($x == 2) continue;
echo $x .', ';
}
?>
Wynikiem działania takiego kodu będzie: 1, 3, - jak łatwo zauważyć gdy zmienna x miała wartość 2 instrukcja continue spowodowała przejście do kolejnego skoku.
Instrukcja DO…WHILE
Zasada działania jest podobna do instrukcji while , ale instrukcje zawarte wewnątrz niej wykonają się przynajmniej raz ponieważ warunek wejścia jest sprawdzany do wykonaniu pętli.
<?php
$x = 4;
do {
$x--;
if ($x == 2) continue;
if ($x == 0) break;
echo $x .', ';
} while($x < 3);
?>
Wynikiem działania będzie więc: 3,.