Przyspieszony kurs PHP

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ć :wink:

Komentarze - to nie typ danych, ale później nie będzie lepszej okazji :slight_smile:

// 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 :slight_smile:

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,.

Nie lepiej napisać bloga, albo umieścić to w sprawdzone porady?

Na blogu szkoda miejsca, a osoby początkujące w klepaniu PHP jak mają problem szybciej zaglądają na forum niż na blogi.

Sprawdzona porada to też tak nie do końca :slight_smile: