Projektowanie stron internetowych - PHP


Typy danych

Posted in Uncategorized by admin on the February 15th, 2007

PHP posiada następujące typy: liczby zmiennoprzecinkowe, liczby całkowite, ciągi, tablice i obiekty. Typ zmiennej jest ustalany w oparciu o kontekst w jakim jest użyta zmienna i nie jest on jawnie ustalany przez programistę. Jest to ważna cecha o której należy pamiętać podczas programowania aplikacji PHP, ponieważ niejawna konwersja typów może spowodować trudne do odnalezienia błędy. Na przykład poniższa instrukcja jest prawidłowa i spowoduje wyświetlenie liczby 9:

print( 3* “3 małe świnki”);

Aby można było zapanować nad typami, PHP posiada funkcje gettype() i settype() oraz kilka funkcji przeznaczonych dla określonych typów, na przykład is_integer() lub is_array(). W skorowidzu funkcji na końcu książki znajduje się pełne omówienie tych funkcji. Teraz zostanie opisany każdy z typów zmiennych (oprócz obiektów). Obiekty PHP zostaną opisane w dalszej części rozdziału.

Liczby — całkowite i zmiennoprzecinkowe

Liczby całkowite można podawać używając notacji dziesiętnej, ósemkowej i szesnastkowej. Liczby zmiennoprzecinkowe można podawać używając notacji zwykłej lub zapisu naukowego. Na poniższym wydruku pokazana jest składnia PHP dla wszystkich tych notacji.

Wydruk 2.4. Reprezentacja liczb

<?php

  $int1 = 523;  // liczba dziesiętna

  $int2 = -523;  // dziesiętna ujemna

  $int3 = 01013;  // ósemkowa reprezentacja liczby 523

  $int4 = 0×20B;  // szesnastkowa reprezentacja liczby 523

  $float1 = 523.197;  // zwykły zapis liczby zmiennoprzecinkowej

  $float2 = 5.23197e2;  // notacja naukowa liczby zmiennoprzecinkowej

  /* Wypisanie wszystkich liczb. 

   Wyświetla “523, -523, 523, 523, 523.197, 523.197″. */

  print( “$int1, $int2, $int3, $int4, $float1, $float2<br>” );

?>

Ciągi

Ciągi w PHP są ograniczane apostrofami () lub cudzysłowami (). Zapisy te różnią się sposobem interpretacji ciągu. Jeżeli ciąg jest otoczony cudzysłowami, zmienne zapisane w ciągu zostają zamienione na ich wartości. Aby zapisać znaki specjalne w ciągach otoczonych cudzysłowami, należy użyć znaku lewego ukośnika (\), tak jak zostało to pokazane w tabeli 2.1.

Tabela 2.1. Znaki specjalne w ciągach otoczonych cudzysłowami

Sekwencja znaków

Znaczenie

\n

nowa linia

\r

powrót karetki (CR)

\t

tabulacja

\\

lewy ukośnik

\”

cudzysłów

\$

znak dolara

W ciągach otoczonych apostrofami zmienne nie są zastępowane. Jedynymi dopuszczalnymi sekwencjami sterującymi są te oznaczające lewy ukośnik (\\) i apostrof (\’). Sekwencje te pozwalają na wpisanie do ciągu znaku apostrofu i lewego ukośnika. Ciągi mogą być łączone przy użyciu operatora kropki (.). Dokładniej jest to opisane w części rozdziału na temat operatorów. Podobnie jak w języku C, mamy dostęp do poszczególnych znaków ciągu, traktując go jak tablicę znaków.

Wydruk 2.5. Przykład operacji na ciągach

<?php

  $aStr1 = “To jest zwykły ciąg.”;

  print( “$aStr1<br>” );

  $aStr2 = “Thatcher”;

  print( “$aStr2<br>” );

  $aStr3 = “Nazywam się $aStr2″;

        // $aStr3 = “Nazywam się Thatcher”

  print( “$aStr3<br>” );

  $aStr4 = “Nazywam się \$aStr2″;

        // $aStr4 = “Nazywam się $aStr2″

  print( “$aStr4<br>” );

  $aStr5 = ‘Nie rozwijaj \’$aStr2\”;

        // $aStr5 = “Nie rozwijaj ‘$aStr2′”

  print( “$aStr5<br>” );

      // wypisuje “Nazywam się Thatcher i Nazywam się $aStr2″

  print( “$aStr3″ . ” i ” . “$aStr4″ );

?>

Z powodu ulotnej natury typów w PHP, zmienne mogą zmieniać swój typ w zależności od kontekstu w jakim występują. Liczby mogą być konwertowane niejawnie na ciągi, jeżeli zostaną użyte jako argument operatora operującego na ciągach. Ciągi mogą również zostać skonwertowane na liczby, jeżeli będą użyte w wyrażeniach matematycznych. Jeżeli PHP próbuje skonwertować ciąg na liczbę, korzysta z następujących zasad:

  • Jeżeli ciąg zaczyna się od danych numerycznych, zostaną one skonwertowane na liczbę.
  • Jeżeli ciąg nie zaczyna się prawidłowymi danymi liczbowymi, wartością ciągu będzie zero (0).
  • Jeżeli dane numeryczne zawierają jeden ze znaków .,e lub E, wartość będzie liczbą zmiennoprzecinkową a w przeciwnym przypadku liczbą całkowitą.

Prawidłowymi danymi numerycznymi są: opcjonalny znak po którym następuje jedna lub więcej cyfr, opcjonalna kropka dziesiętna oraz opcjonalny znak wykładnika. Znakiem wykładnika jest „e” lub „E”, po którym następuje jedna lub więcej liczb.

Wydruk 2.6. Niejawna konwersja pomiędzy ciągiem i liczbą

<?php

  $aVar = 123;

  print( “\$aVar = $aVar, typ = ” . gettype( $aVar ) . “<br>” );

 

  $aVar2 = $aVar . ” niejawnie skonwertowane do ciągu”;

  print( “\$aVar2 = $aVar2, typ = ” . gettype( $aVar2 ) . “<br>” );

 

  $aVar3 = $aVar2 + 1;  // niejawna konwersja na liczbę całkowitą

  print( “\$aVar3 = $aVar3, typ = ” . gettype( $aVar3 ) . “<br>” );

 

  $aVar3 = $aVar2 * 1.1;  // niejawna konwersja na liczbę zmiennoprzecinkową

  print( “\$aVar3 = $aVar3, typ = ” . gettype( $aVar3 ) . “<br>” );

 

  $aNotNumber = “abc”;

  $aVar4 = $aNotNumber * 1; // próba konwersji na liczbę, zwracane jest 0

  print( “\$aVar4 = $aVar4, typ = ” . gettype( $aVar4 ) . “<br>” );

 

  $aIsNumber = “3 małe świnki”;

  $aVar5 = $aIsNumber + 1; // konwersja $aIsNumber na liczbę 3

  print( “\$aVar5 = $aVar5, typ = ” . gettype( $aVar5 ) . “<br>” );

?>

Tablice

Tablice w PHP zachowują się zarówno tak jak tablice indeksowane (wektory) oraz jak tablice mieszające (asocjacyjne). PHP pozwala również na tworzenie tablic wielowymiarowych. Z powodu unikalnej konstrukcji tablic w PHP, można indeksować jeden wymiar tablicy wielowymiarowej liczbami a inny w sposób asocjacyjny.

Tablice mogą być tworzone przy użyciu funkcji list() lub array() albo poprzez jawne podanie każdej z wartości. W skorowidzu funkcji na końcu książki zostały opisane wszystkie funkcje do manipulacji tablicami.

Jednowymiarowe tablice mogą zamieniane w ciągach przez mechanizm zastępowania zmiennych na wartości w sposób identyczny jak wszystkie inne zmienne. W przypadku tablic wielowymiarowych należy użyć nawiasów klamrowych do zaznaczenia indeksów. Poniższy wydruk pokazuje przykłady użycia różnych typów tablic.

Wydruk 2.7. Inicjowanie i użycie tablic

<?php

  // Jawne tworzenie prostej tablicy

  $a[0] = “Ryan”;

  $a[1] = “Scott”;

  $a[] = “Randall”; // jawne przypisanie do indeksu (klucza) 2

  $a[] = “Sherie”;  // jawne przypisanie do indeksu (klucza) 3

  print( “$a[3], $a[2], $a[1], $a[0]<br>” );

 

  // Tworzenie tablicy asocjacyjnej

  $color[”niebieski”] = “#0000FF”;

  $color[”zielony”] = “#00FF00″;

  $color[”czerwony”] = “#FF0000″;

  print( “Wartość szesnastkowa koloru czerwonego wynosi {$color[’czerwony’]}<br>” );

 

  // Tworzenie tej samej co poprzedniej tablicy asocjacyjnej

  // tylko nieco prościej

  $color = array( “niebieski”  =>  “#0000FF”,

          “zielony”  =>  “#00FF00″,

          “czerwony”  =>  “#FF0000″ );

  print( “Wartość szesnastkowa koloru zielonego wynosi {$color[’zielony’]}<br>” );

 

  // Ręczne tworzenie tablicy wielowymiarowej

  $m[0][0] = “Zero Zero”;

  $m[0][1] = “Zero Jeden”;

  print( “Wartością \$m[0][1] jest {$m[0][1]}<br>” );

 

  // Ręczne tworzenie asocjacyjnej tablicy wielowymiarowej

  $counties[”Idaho”][0] = “Ada”;

  $counties[”Idaho“][1] = “Adams“;

  $counties[”Idaho“][2] = “Bannock”;

  $counties[”Arizona“][0] = “Apache”;

  $counties[”Arizona“][1] = “Cochise”;

  $counties[”Arizona“][2] = “Coconino”;

  print( “\$counties[’Idaho‘][0] = {$counties[’Idaho‘][0]}<br>” );

?>

Comments are closed.