Co to jest PHP ?
PHP to skryptowy język programowania służący głównie do tworzenia stron internetowych. PHP jest rozprowadzany na otwartej licencji i każdy może pobrać za darmo jego kopię, zainstalować i używać bez żadnych ograniczeń zarówno do celów prywatnych jak i komercyjnych. Język jest prosty w nauce i umożliwia tworzenie profesjonalnych dynamicznych stron internetowych.
Skrypt
Jak wspomnieliśmy wcześniej, skrypty PHP możemy mieszać ze zwykłym kodem HTML. Kod naszych algorytmów zamykany jest wewnątrz specjalnych wstawek wyłapywanych przez interpreter oraz zmienianych później na wygenerowany tam kod. Tak też zrobimy w naszym pierwszym skrypcie, który tradycyjnie wyświetli na ekranie przeglądarki napis "Witaj Świecie!".
<html>
<head>
<title>Pierwszy skrypt</title>
</head>
<body>
<?php
echo 'Witaj Świecie!';
?>
</body>
</html>
W powyższym przykładzie widzimy skrypt PHP osadzony za pomocą znaczników:
<?php
?>
W zwyczajnym kodzie HTML, który w następnych przykładach będziemy już pomijać, aby nie marnować miejsca. Wewnątrz mamy jedną linijkę:
echo 'Witaj Świecie!';
Nakazuje ona wyświetlenie tekstu "Witaj Świecie!" w przeglądarce. Tekst do wyświetlenia ograniczyliśmy apostrofami. Średnik na końcu informuje o zakończeniu komendy. Możemy rozbić to na kilka linijek, ale dla PHP nie będzie to miało większego znaczenia - końcem komendy jest właśnie średnik.
<?php
echo
'Hello world!';
?>
Przejście do nowej linii poza apostrofami jest jednym z tzw. białych znaków ignorowanych przez interpreter. Innymi są spacja oraz tabulacja. Między tekstem, a komendą echo możemy wstawić niezliczoną liczbę tabulatorów i zejść do nowej linii, ale nie zmieni to w żaden sposób tego, jak PHP wykona nasz skrypt, gdyż znaki te zostaną zignorowane.
W skrypcie możemy umieścić więcej wyrażeń, oczywiście odseparowanych średnikami:
<?php
echo 'To jest tekst 1';
echo 'To jest tekst 2';
echo 'A to jest tekst 3';
?>
Zauważ, że choć w skrypcie mamy trzy komendy wyświetlenia trzech tekstów, przeglądarka wyświetli je nam w jednej linijce. To dlatego, że przecież PHP nie wysłał żadnego znacznika HTML nakazującego ładne połamanie wyniku - obejrzyj sobie źródło strony w przeglądarce i przekonaj się o tym. Oto poprawiona wersja skryptu:
<?php
echo 'To jest tekst 1<br/>';
echo 'To jest tekst 2<br/>';
echo 'A to jest tekst 3<br/>';
?>
Mieszanie kodu PHP z X/HTML-em spotykane jest najczęściej jedynie w prostych skryptach. W złożonych aplikacjach znacznie utrudnia jakiekolwiek modyfikacje wyglądu. W dalszych rozdziałach tego podręcznika nauczymy się korzystać z szablonów, które pomogą nam całkowicie oddzielić jedno od drugiego, lecz na razie wszystko będzie wymieszane.
Kiedy twoje skrypty staną się bardziej rozbudowane, w kodzie przyda się pewna organizacja. Pomogą tu z pewnością komentarze służące do opisywania, co robi dana część algorytmu, jak działa, jakie ma wymagania itd. Mogą także pomóc w usystematyzowaniu całości lub też zamieszczeniu informacji o autorze oraz prawach autorskich. Istnieją trzy rodzaje komentarzy:
<?php
/*
komentarz kilkuwierszowy
może być rozbijany na wiele linijek.
Cały ten tekst jest ignorowany przez interpreter
*/
// to jest komentarz jednowierszowy - obowiązuje do końca danej linijki
# to jest jeszcze jeden komentarz jednowierszowy
?>
Komentarze przydają się przy zbiorowych pracach nad projektem. Można w nich umieszczać informacje, co należy w danym fragmencie poprawić albo jak on funkcjonuje. W procesie usuwania błędów (debugowania) komentarzy można używać do chwilowego wyłączania kawałków kodu, aby zobaczyć, czy to przypadkiem one nie powodują problemu oraz jak aplikacja radzi sobie bez nich. Stosowanie komentarzy należy do dobrych praktyk programistycznych i nigdy nie należy o nich zapominać, w szczególności jeżeli udostępniasz kod innym użytkownikom.
Operatory działań
PHP, jak każdy inny język programowania, operuje na danych. Niektóre z nich są zapisane na sztywno w skrypcie. Niemniej każda rzecz, która reprezentuje jakąkolwiek informację, zwana jest wyrażeniem. Oto prosty przykład:
8
To jest wyrażenie liczbowe reprezentujące liczbę całkowitą.
6.454
'To jest tekst bez znaków specjalnych'
"To też jest tekst, ale ze znakami specjalnymi"
Powyżej mamy dwa wyrażenia reprezentujące tekst. Pomiędzy nimi istnieje istotna różnica (dla PHP). Apostrofy, czyli "pojedyncze" cudzysłowy służą do ograniczania tekstu, w którym interpreter PHP nie będzie szukał wywołań innych zmiennych. W przypadku cudzysłowów interpreter będzie szukam wywołań zmiennych. Jeżeli w tekście ograniczonym apostrofem lub cudzysłowem chcemy wstawić odpowiednio apostrof lub cudzysłów to musimy go oznaczyć odwróconym ukośnikiem by PHP nie uznało go za koniec tekstu:
<?php
echo 'To jest tekst z ' apostrofem';
echo "To jest tekst z " cudzysłowem";
Cudzysłów posiada kilka dodatkowych kodów formatujących:
- - tak robimy zejście do nowej linijki w systemach Linux
- - tak w systemach Mac
- - a tak w systemach operacyjnych Windows
- - wstawia tabulator
Wyrażenia można łączyć ze sobą za pomocą kropki. Wykorzystuje się to dość często w łączeniu zmiennych, funkcji i innych wyrażeń. Przykład znajdziemy poniżej.
Funkcje
Informatyka wiele zawdzięcza matematyce. W programowaniu występuje wiele pojęć zaczerpniętych bezpośrednio od królowej nauk. Jednym z nich jest funkcja, do której możemy wprowadzać parametry, a w zamian otrzymujemy jakiś wynik. Poniższy skrypt będzie pierwszym "naprawdę" dynamicznym, jaki stworzymy. Skorzystamy w nim z dwóch funkcji, aby wyświetlić aktualny czas:
<?php
echo 'Dzisiaj mamy: '.date('d.m.Y').'<br/>';
echo 'Od 1.1.1970 minęło: '.time().' sekund';
?>
Jak widać, składnia funkcji jest następująca: nazwaFunkcji(parametry). Jeśli funkcja nie posiada parametrów, nawiasy są puste. Jeżeli jest ich więcej, niż jeden, oddzielamy je od siebie przecinkiem. Zaś sam parametr jest niczym innym, jak wyrażeniem. Jest nim także funkcja, dlatego możemy ją wpleść w nasz tekst za pomocą operatora kropki.
Zmienne
Innym pojęciem matematycznym jest zmienna reprezentująca informację nieznaną w trakcie pisania skryptu. Jest to taki pojemnik, do którego możemy w trakcie wykonywania skryptu wstawiać wszelkie informacje, zapamiętując je w ten sposób. Bez zmiennych nie można mówić o jakimkolwiek przetwarzaniu danych, ponieważ komputer musi mieć jakąś możliwość umieszczania gdzieś wyników obliczeń oraz przechowywania niezbędnych programom danych.
Każda zmienna posiada własną, unikalną nazwę, która jednoznacznie ją identyfikuje. Język PHP wymaga, aby zaczynała się ona od znaku dolara, a następnie od litery lub podkreślenia. Dalsze znaki mogą być także cyframi. Można stosować duże litery, ale dla interpretera ma to istotne znaczenie. $zmienna i $Zmienna to dwie różne zmienne. Przykłady prawidłowych nazw zmiennych:
$a, $b, $foo, $_50, $_foo, $moja_zmienna, $mojaZmienna3
Aby przypisać wartość do zmiennej, należy ułożyć wyrażenie z operatorem =. Po lewej stronie umieszczamy naszą zmienną, a po prawej inne wyrażenie określające wstawianą wartość. Oto, jak wygląda to w praktyce:
<?php
// inicjujemy zmienna $czas aktualnym czasem w sekundach od 1.1.1970
$czas = time();
echo 'Od 1.1.1970 minęło '.$czas.' sekund<br/>';
echo 'Od 1.1.1970 minęło '.($czas / 60).' minut<br/>';
echo 'Od 1.1.1970 minęło '.($czas / 3600).' godzin';
?>
W powyższym przykładzie stworzyliśmy zmienną $czas, wprowadzając do niej aktualny czas. Następnie wykorzystaliśmy ją w obliczeniach. Poznaliśmy w ten sposób jedno z zastosowań zmiennych. Zachowaliśmy w nich wynik działania jednej sekcji programu, aby potem używać go wielokrotnie gdzie indziej bez konieczności każdorazowego odwoływania się do funkcji i zbędnego liczenia po sto razy tego samego. Wprawdzie pobieranie aktualnego czasu nie jest czasochłonną operacją, ale na razie jesteśmy jeszcze na początkowym etapie nauki i musimy dbać o prostotę przykładów.
PHP, w przeciwieństwie do innych języków programowania, ma bardzo liberalne reguły stosowania zmiennych. W ogóle nie trzeba ich nigdzie deklarować, a interpreter sam na bieżąco dopasuje typ informacji do naszych potrzeb. Dana zmienna jest tworzona podczas pierwszego jej wykorzystania w skrypcie. Jest sporo sytuacji, w których zachowanie to jest pożądane, lecz normalnie może utrudnić ono pracę. Wyobraź sobie taką sytuację: programista potrafi najczęściej bardzo szybko pisać i od czasu do czasu zdarza mu się wcisnąć dwa klawisze w złej kolejności. Powstaje literówka. Jeżeli zostanie ona popełniona podczas wpisywania nazwy, PHP w teorii nie zgłosi tego jako błędu i programista będzie musiał spędzić dużo czasu na jej odnalezienie. Słowo "teoria" nie znalazło się tu przypadkowo. Im wyższy poziom raportowania błędów, tym większej ilości rzeczy czepia się PHP. Na poziomie ''E_ALL'' zdefiniowanym w rekomendowanym pliku ''php.ini'' takie beztroskie podejście do zmiennych nie jest tolerowane. Tutaj PHP wymaga już, aby podczas pierwszego użycia zmiennej została jej przypisana jakaś wartość, ponieważ inaczej otrzymamy powiadomienie (ang. ''notice'') o próbie odwołania się do nieistniejącej zmiennej ("Notice: Undefined variable").
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;
?>
<?php
$format = 'd.m.Y';
echo date($format);
?>
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, w którym w ogóle opuszczamy zmienne:
<?php
echo addslashes(strtolower('To jest jakiś tekst'));
?>
W drugim "złym" skrypcie w ogóle niepotrzebnie tworzymy zmienną; przecież format daty możemy wpisać bezpośrednio do funkcji.
<?php
echo date('d.m.Y');
?>
W tym jednak przypadku może być to uznane za kwestię dyskusyjną. Jeżeli nasz skrypt bardzo często będzie formatować różne daty, a my będziemy chcieli mieć możliwość jej prostego konfigurowania, warto pokusić się o zapisanie formatu w jakiejś zmiennej. W ten sposób poprzez zmianę jej wartości w jednym miejscu zostanie ona uwzględniona w całym skrypcie.
Typy zmiennych
W sekcji poświęconej rodzajom danych w PHP dowiedziałeś się, że istnieje pewne rozróżnienie na tekst i liczby. Skoncentrujemy się teraz na poznaniu większej ilości typów oraz pokazaniu, jak PHP dokonuje konwersji między nimi.
Istnieją trzy kategorie typów: ''wielkości skalarne'', ''typy złożone'' oraz ''typy specjalne''. Dokumentacja wymienia jeszcze jedną, lecz stworzoną na jej własne potrzeby do zaznaczania niektórych rzeczy. Powiemy o niej później.
Stałe
Do zdefiniowania stałych używamy funkcji define(), w której definiujemy nazwę stałej oraz jej wartość. Zwyczajowo stałe mają nazwy złożone z samych dużych liter, a wartościami mogą być wyłącznie typy skalarne (czyli nie tablice, nie obiekty oraz nie zasoby). Podczas wywoływania stałych nie poprzedzamy znakiem dolara.
<?php
define('STALA', 'test');
echo STALA;
?>
Oto wszystkie cechy stałych:
- Stałe nie mają znaku dolara ($) przed nazwą
- Stałe mogą być definiowane oraz używane wszędzie bez zważania na zasady dotyczące zakresu ich dostępności
- Stałe nie mogą być ponownie definiowane lub "oddefiniowane" po tym jak raz zostały zdefiniowane
- Stałe mogą zawierać tylko wartości skalarne
Instrukcja IF
Najprostsza instrukcja warunkowa o budowie:
IF (WARUNEK)
{
//kod który ma się wykonać przy spełnieniu warunku
}
Instrukcję tę możemy sobie tłumaczyć tak: Jeżeli (IF) warunek jest spełniony to ({}). Oto przykład kodu PHP z taką instrukcją:
<?php
$liczba = 3;
IF ($liczba == 3)
{
echo 'Podana liczba to 3';
}
Jeżeli zmienna liczba ma wartość równą 3 (znak "=" to przypisanie wartości, "==" to "znak" równości) to wyświetl tekst "Podana liczba to 3". Instrukcję można rozbudować dodając kilka nowych elementów:
<?php
IF ($liczba == 3)
{
echo 'Podana liczba to 3';
}
else
{
echo 'Podano inną liczbę niż 3';
}
Klausula "else" określa co ma się stać gdy warunek nie zostanie spełniony. Jeżeli nie potrzebujemy nie musimy dawać "else" do instrukcji. Jeżeli natomiast chcemy np. zrobić coś gdy $liczba ma wartość 1 i coś innego gdy ma wartość np. 3 to możemy jeszcze bardziej to rozbudować:
<?php
IF ($liczba == 1)
{
echo 'foo';
}
elseIF ($liczba == 2)
{
echo 'foo';
}
elseIF ($liczba == 3)
{
echo 'foo';
}
elseIF ($liczba == 4)
{
echo 'foo';
}
else
{
echo 'Jesteśmy poza zakresem';
}
elseIF tłumaczymy jako "w przeciwnym wypadku jeżeli" tj. Jeżeli (IF) $liczba == 1 to zrób foo :) w przeciwnym wypadku jeżeli $liczba == 2 to zrób cośtam itd. Kolejnym rozwinięcie są warunki. Za jednym zamachem możemy określić kilka warunków:
<?php
$liczba = 'foo';
IF (isset($liczba) and is_numeric($liczba))
{
echo 'Zmienna liczba przechowuje wartość liczbową';
}
elseIF(isset($liczba) and !is_numeric($liczba))
{
echo 'Zmienna liczba nie przechowuje liczby';
}
else
{
echo 'Zmienna liczba nie istnieje';
}
Operator trójwymiarowy
Ogólna konstrukcja omawianego operatora wygląda następująco:
warunek ? jesli_prawda : jeśli_fałsz |
Pierwszym elementem tej konstrukcji jest warunek jaki musi zostać spełniony. W przypadku zwrócenia wartości "true" wykonywany jest drugi element "jeśli_prawda". W przeciwnym razie wykonywany jest kod z trzeciego argumentu.
Podstawowym zadaniem operatora trójargumentowego jest określanie domyślnej wartości zmiennej. Aby tego dokonać bez pomocy omawianego operatora, zapewne skorzystałbyś z konstrukcji warunkowej, takiej jaka została przedstawiona poniżej:
<? if (isset($zmienna1)) { $wynik = $zmienna1; } else { $wynik = $zmienna2; } ?> |
Kod jest długi i wielokrotne stosowanie takich składni może wydać się mało efektywne. Z pomocą przychodzi nam zatem operator trójargumentowy. Przedstawiony powyżej przykład można więc zapisać w następującyc sposób:
<? $wynik = isset($zmienna1) ? $zmienna1 : $zmienna2; ?> |
Rożnica jest dobrze widoczna. Dzięki takiemu zapisowi pozbyliśmy się niewygodnych warunków z nawiasami, a kod stał się prosty, czytelny i co ważniejsze, przyjemniejszy w zapisie.
Być może uda Ci się zastosować ten operator do innych celów, w których pomoże zmniejszyć objętość kodu i sprawi, że Twoje skrypty będą pełne ciekawych rozwiązań.