Podstawy składni PHP
'To jest tekst bez znaków specjalnych' "To też jest tekst, ale ze znakami specjalnymi"
<?php
echo 'To jest tekst z ' apostrofem';
echo "To jest tekst z " cudzysłowem";
- - tak robimy zejście do nowej linijki w systemach Linux
- - tak w systemach Mac
- - a tak w systemach operacyjnych Windows
- - wstawia tabulator
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';
?>
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:
<?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);
?>
<?php
$tekst = 'To jest jakiś tekst';
$tekst = strtolower($tekst);
$tekst = addslashes($tekst);
echo $tekst;
?>
<?php
echo addslashes(strtolower('To jest jakiś tekst'));
?>
<?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.
Wielkości skalarne
Pierwszym typem skalarnym jest liczba całkowita. Jej angielskim określeniem jest integer albo int. Może być ona zapisana w trzech systemach liczbowych: dziesiętnym, szesnastkowym albo ósemkowym:<?php
$a = 1234; // liczba całkowita
$a = -123; // liczba całkowita ujemna
$a = 0123; // zapis ósemkowy (odpowiednik dziesiętnego 83)
$a = 0x1A; // zapis szesnastkowy (odpowiednik dziesiętnego 26)
?>
<?php
$a = 1.234;
$a = 1.2e3;
$a = 7E-10;
?>
Specjalnie wyróżniony został tzw. typ logiczny (boolean) przyjmujący jedynie wartości FALSE i TRUE. Jest on bardzo ważny, ponieważ wiele funkcji generuje właśnie w nim rezultat, czy operacja się powiodła. Wyrażenia porównawcze także generują wartości logiczne.
Ostatnim z typów skalarnych jest ciąg tekstowy (ang. string). Zdążyliśmy już powiedzieć nieco o nim, np. że istnieją dwie składnie zapisywania ciągów. Ta oparta na apostrofach posiada minimalny zestaw kodów formatujących pozwalających na wstawienie do tekstu innych apostrofów oraz ukośników wstecznych:
<?php
echo 'To jest tekst zapisany w apostrofach. Kody formatujące pozwalają
umieścić w tekście wyłącznie inne apostrofy: ' albo backslashe: \. Wszystko inne,
np.
zostanie wyświetlone jako zwyczajny tekst';
?>
<?php
echo "To jest tekst zapisany w apostrofach. Za pomocą kodów formatujących możemy
umieszczać wiele rzeczy: " \
\$";
?>
<?php
$czas = time();
echo "Aktualny czas w sekundach: $czas sek.";
?>
<?php
// mozna takze użyć apostrof
echo 'Aktualny czas w sekundach: '.time().' sek.';
?>
<?php
$formatDaty = 'd.m.Y';
echo date("$formatDaty");
?>
Inne typy
Typami złożonymi są w PHP tablice oraz obiekty. Tablice poznamy jeszcze w tym rozdziale, natomiast obiektami oraz samym programowaniem obiektowym w kolejnych artykułach.
Istnieją jeszcze dwa typy specjalne: resource (zasób) oraz NULL. Pierwszy z nich reprezentuje wszelkiego rodzaju połączenia z bazami danych, otwarte przez PHP pliki itd. Drugi to wartość pusta. Za jego pomocą możemy "za symulować", że zmienna nie istnieje lub nie zawiera wartości. Pojawia się w trzech sytuacjach:- Do zmiennej przypisana została stała NULL.
- Do zmiennej nie została przypisana jeszcze żadna wartość (zgłaszane jest wtedy powiadomienie)
- Zmienna została zniszczona poleceniem unset().
Konwersja typów
PHP potrafi sam rozpoznać typ informacji przypisanej do zmiennej oraz automatycznie konwertować go w zależności od potrzeb. Przykładowo liczby ułamkowe użyte tam, gdzie potrzeba całkowitych, są zaokrąglane w górę do zera. Wartości logiczne mogą być reprezentowane cyframi 0 ('''FALSE''') oraz 1 ('''TRUE'''). Ciągi tekstowe mogą być konwertowane do liczb, jeżeli pierwszy z ich (pomijając wiodące białe znaki) znaków jest cyfrą. W przeciwnym przypadku PHP dobiera wartość 0.
Możemy sami wymusić konwersję typów:
<?php
// wyświetl liczbę całkowitą jako ułamek
echo (float) 10;
?>
W nawiasie przed wartością piszemy angielską nazwę typu: integer, int, string, boolean, float, double (liczba zmiennoprzecinkowa mogąca przybierać znacznie większe wartości). Unikaj jakiejkolwiek konwersji typów złożonych: tablic, obiektów, zasobów, gdyż w każdym z tych przypadków informacje zostają całkowicie utracone; zamiast nich zwracana jest po prostu nazwa typu złożonego - to dlatego ostrzegaliśmy przed wprowadzaniem wartości zmiennych do funkcji przez cudzysłowy.
PHP posiada funkcję gettype() zwracającą nazwę aktualnego typu danych zawartych w zmiennej:
<?php
$a = 547;
echo 'Typ zmiennej $a to: '.gettype($a);
?>
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. Oto wykaz najciekawszych operatorów na początek:
Operator | Nazwa | Składnia | Opis |
---|---|---|---|
/ | Dzielenie | wyrażenie / wyrażenie | Reprezentuje wynik dzielenia. Drugie wyrażenie nie może być zerem. |
% | Dzielenie modulo | wyrażenie % wyrażenie | Reprezentuje resztę z dzielenia. Drugie wyrażenie nie może być zerem. |
* | Mnożenie | wyrażenie * wyrażenie | Reprezentuje iloczyn dwóch wyrażeń. |
+ | Dodawanie | wyrażenie + wyrażenie | Reprezentuje sumę dwóch wyrażeń. |
- | Odejmowanie | wyrażenie - wyrażenie | Reprezentuje różnicę dwóch wyrażeń. |
. | Łączenie (Konkatenacja) | wyrażenie . wyrażenie | Reprezentuje połączenie dwóch wyrażeń w ciąg tekstowy. |
++ | Inkrementacja (zwiększenie) | $zmienna++ | Reprezentuje wartość zmiennej, a następnie zwiększa ją o 1. |
++ | Inkrementacja (zwiększenie) | ++$zmienna | Reprezentuje wartość zmiennej powiększoną o 1. |
-- | Dekrementacja (zmniejszenie) | $zmienna-- | Reprezentuje wartość zmiennej, a następnie zmniejsza ją o 1. |
-- | Dekrementacja (zmniejszenie) | --$zmienna | Reprezentuje wartość zmiennej pomniejszoną o 1. |
<?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/>';
?>
Stan 1: 5 Stan 2: 6 Restart zmiennej... Stan 1: 6 Stan 2: 6
Operator | Składnia | Równoważna postać | Opis |
---|---|---|---|
/= | $zmienna /= wyrazenie | $zmienna = $zmienna / wyrażenie | Dzieli zmienną przez wyrażenie i umieszcza w niej wynik. Wyrażenie nie może być zerem. |
%= | $zmienna %= wyrazenie | $zmienna = $zmienna / wyrażenie | Umieszcza w zmiennej resztę z dzielenia tej zmiennej przez wyrażenie, które oczywiście nie może być zerem. |
*= | $zmienna *= wyrazenie | $zmienna = $zmienna * wyrażenie | Mnoży zmienną przez wyrażenie i zapisuje w niej wynik. |
+= | $zmienna += wyrazenie | $zmienna = $zmienna + wyrażenie | Dodaje do zmiennej wyrażenie i zapisuje w niej wynik. |
-= | $zmienna -= wyrazenie | $zmienna = $zmienna - wyrażenie | Odejmuje od zmiennej wyrażenie i zapisuje w niej wynik. |
.= | $zmienna .= wyrazenie | $zmienna = $zmienna . wyrażenie | Dołącza do zmiennej tekstowej nowy fragment. |
<?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;
?>
Tablice
Tablica to zmienna grupująca zestaw wartości dowolnego typu (np. liczby, tekst czy inne tablice) i umożliwiająca łatwe operowanie i dostęp do przechowywanych danych.<?php
$tablica = array();
?>
<?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
?>
<?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
echo 'Pod numerem 5 kryje się wartość '.$tablica[5];
?>
<?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
echo 'Pod numerem X kryje się wartość '.$tablica[rand(0, 8)];
?>
W tym skrypcie za wybranie indeksu tablicy odpowiada funkcja ''rand()'' zwracająca losową wartość z tablicy.
Indeksy tablicy wcale nie muszą być numeryczne. PHP dopuszcza także tekstowe wersje. Mamy wtedy do czynienia z 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>';
?>
Na podstawie kursu PHP na Wikibooks, licencja GNU Free Documentation License
Comment article