TYPY ZMIENNYCH
W PHP nie musisz deklarować nazwy zmiennej ani jej typu przed użyciem. W trakcie wykonywania skryptu typ określi samo PHP w zależności od sytuacji w jakiej zmienna została zastosowana.
Jeżeli jest dla Ciebie istotne, aby dana zmienna była określonego typu i nie chcesz, żeby decydował o tym parser PHP, możesdz użyć do ustalenia typu zmiennej funkcji
settype(). Zmienna zostanie wtedy przekonwertowana na wskazany typ. Jezeli zaś chcesz sprawdzić typ zmiennej, możesz użyć funkcji
gettype() do jego odczytania.
Liczby całkowite
Liczby całkowite jako typ danych w PHP to dodatnie i ujemne liczby dziesiętne, liczby ósemkowe i szesnastkowe. Ich deklaracja wygląda następująco:
<?
$zmienna = 19; // liczba dziesiętna dodatnia
$zmienna = -5; // liczba dziesiętna ujemna
$zmienna = 0145; // liczba ósemkowa (w systemie dziesiętnym 101)
$zmienna = 0x19; // liczba szesnastkowa (w systemie dziesiętnym 25)
?>
|
Liczby zmiennoprzecinkowe
Liczby zmiennoprzecinkowe zawierają część dziesiętną. W PHP zapisuje się je w sposób następujący:
<?
$zmienna = 1.234;
$zmienna = 1.2e3;
?>
|
Łańcuchy znaków
Łańcuchy znaków przechowują różnego rodzaju teksty. Są one umieszczane w cudzysłowach pojedynczych
(') lub w podwójnych
("). Tylko w tej drugiej sytuacji tekst zostanie przeszukany w celu znalezienia zmiennych. Jeżeli natomiast umieścisz tekst w cudzysłowach pochylonych
(`), to zostanie on potraktowany przez parser PHP jako polecenie zewnętrzne, które nalezy wykonać.
<?
# deklaracja łańcucha
$string = "tekst łańcucha znaków";
# dodanie do zmiennej $string nowego łańcucha
$string = $string . " dodany łańcuch";
# przypisanie do zmiennej $string wartości 'pozycja 17'
$liczba = 17;
$string = "Pozycja: $liczba";
# pobranie pierwszej litery tekstu
$string = "dowolny tekst";
$pierwsza_litera = $string[0];
// zmienna $pierwsza_litera jest równa 'd'
# pobranie listy plików aktualnego katalogu do zmiennej $lista_plikow
$lista_plikow = `dir`; // windows
$lista_plikow = `ls`; // linux
?>
|
Znaki specjalne
Znaki specjalne w PHP tworzy się przez dodanie przed danym znakiem
backslasha (\). Istnieją dwa typy znaków specjalnych: znaki formatujące i znaki drukowane.
Znaki formatujące to np. znak
\n, który oznacza przejście do nowej linii.
<?
#drukownie bez znaków \n echo("pierwsza linia");
echo("druga linia");
?>
|
Powyższy kod zwróci do przeglądarki następujący wynik:
pierwsza liniadruga linia
|
Natomiast ten:
<?
# drukowanie z użyciem znaków \n echo("pierwsza linia\n");
echo("druga linia\n");
?>
|
zwróci:
pierwsza linia druga linia
|
Znaki nowej linii
(\n) nie będą interpretowane przez przeglądarkę jako łamanie wiersza, w HTML-u bowiem stosuje się znacznik
<br>. Wprowadzone przejścia do nowej linii będą widoczne natomiast w kodzie źródłowym strony.
Aby osiągnąć przejście do nowej linii i w kodzie strony, i w HTML-u, należy zastosować taki sposób pisania:
<?
# drukowanie z użyciem znaków \n i <br> echo("pierwsza linia<br>\n");
echo("druga linia<br>\n");
?>
|
Pozwyższy kod zwróci do przeglądarki następujący tekst:
pierwsza linia<br>
druga linia<br>
|
Pewne znaki, na przykład
$ czy
" pełnią specjalne funkcje. Aby parser PHP traktował taki zapis jak normalny znak, a nie początek zmiennej czy tekstu, należy za każdym razem umieścić prze nim
baskslash (\).
<?
# cudzysłowy proste echo('znak " oznacza cudzysłów');
?>
|
Kod ten zwróci:
Spróbujmy teraz napisać to samo, ale z użyciem podwójnego cudzysłowu:
<?
# cudzysłowy podwójne echo("znak \" oznacza cudzysłów\n");
?>
|
Kod ten zwróci to, co poprzednio, ale ze znakiem nokej linii na końcu, ponieważ w podwójnych cudzysłowach mogliśmy użyć zanaku
\n. W pojedynczych zostałby on zignorowany i wydrukowany jako normalny tekst.
Gdybyśmy nie napisali przed znakiem
" backslasha, parser PHP zwróciłby komunikat:
Parse error: parse error in <lokalizacja pliku> on line <numer linii>
|
Wybrane znaki specjalne:
\n - nowa linia
\r - powrót karetki
\t - tabulator
\\ - backslash
\$ - znak dolara
\" - cudzysłów podwójny
|
Konwersje łańcuchów
Ponieważ PHP samo definiuje typy zmiennych, możliwe jest wykonywanie działań arytmetycznych na tekstach i liczbach (całkowitych lub zmiennoprzecinkowych). Łańcuch tekstowy będzie traktowany jako liczba zmiennoprzecinkowa, jeśli zawiera jeden ze znaków:
-,
e lub
E. W innym przypadku łańcuch tekstowy będzie traktowany jako liczba całkowita. PHP spróbuje wyszukać na początku tekstu wartość numeryczną i jeśli jej nie znajdzie, podstawi wartość domyślną czyli zero
(0).
<?
$zmienna = 2 + "14.8";
// zmienna jest równa 16.8 (liczba zmiennoprzecinkowa)
$zmienna = 1 + "-1.3e3";
// zmienna jest równa -1299 (liczba zmiennoprzecinkowa)
$zmienna = 5 + "tekst-15";
// zmienna jest równa 5 (liczba całkowita)
$zmienna = 7 + "10 linii tekstu";
// zmienna jest równa 17 (liczba całkowita)
$zmienna = "12.0 linii " + 3;
// zmienna jest równa 15 (liczba całkowita)
$zmienna = "12.0 linii " + 8.0;
// zmienna jest równa 20.0 (liczba zmiennoprzecinkowa)
?>
|
Tablice
Tablice, pobobnie jak zmienne, służą do przechowywania danych. Są bardziej rozbudowaną strukturą danych. Odwołujemy się do nich za pomocą nazwy tablicy i indeksu liczbowego bądź tekstowego. Tablice jako struktury są tematem następnego rozdziału (
rozdział o tablicach).
<?
# indeksy liczbowe
$tablica[0] = "element pierwszy o indeksie 0";
$tablica[1] = "element drugi o indeksie 1";
# indeksy tekstowe
$inna_tablica["pole1"] = 19;
$inna_tablica["pole2"] = 38;
# drukowanie zawartości elementów tablic echo $tablica[0] . "<br>\n" . tablica[1] ."<br>\n" . $inna_tablica["pole1"] . "<br>\n" . $inna_tablica["pole2"];
?>
|
Ostatnia linia skryptu zwraca następujący kod:
element pierwszy o indeksie 0<br>
element drugi o indeksie 1<br>
19<br>
38
|
Klasy
Klasy służą do przechowywania zmiennych i funkcji w jednym obiekcie o określonym identyfikatorze.
<? class koszyk {
var $jablka;
function dodaj_jablko($ilosc) {
$this->jablka += $ilosc;
}
function podaj_jablka() {
return($this->jablka);
}
}
?>
|
Powyższy kod tworzy klasę o nazwie 'koszyk'. Można na niej wykonać dwie czynności: dodaj daną ilość jabłek oraz odczytać ile jest ich już w koszyku. Spójrzmy zatem na przykład korzystania z takiej klasy:
<? # stwórz egzemplarz obiektu
$koszyk_1 = new koszyk;
# dodaj pięć jabłek
$koszyk_1->dodaj_jablko(5);
# dodaj jeszcze ilość jabłek w zależności od wartości zmiennej
$ilosc = 3;
$koszyk_1->dodaj_jablko($ilosc);
# odczytaj ilość jabłek w koszyku
$ile = $koszyk_1->podaj_jablka();
echo("Masz $ile jabłek w koszyku");
?>
|
Ten kod zwróci ilość jabłek w koszyku, czyli: