Sta│e, Zmienne, Typy danych

--------------------
Zmienne
--------------------

Zmienne, jak w ka┐dym innym jΩzyku, s│u┐▒ do przetrzymywania danych. Z ka┐d▒ zmienn▒ wi▒┐e siΩ jej typ, na podstawie kt≤rego wiadomo jest, jakie operacje na danej zmiennej mo┐na wykonaµ. W PHP mamy do dyspozycji tylko trzy typy danych: │a±cuchy, liczby ca│kowite oraz liczby rzeczywiste (zmiennoprzecinkowe).

Identyfikatorem nazywamy nazwy zmiennych (ale r≤wnie┐ sta│ych i funkcji). Mog▒ one siΩ zak│adaµ z dowolnych liter, cyfr i znaku podkre╢lenia. Nie wolno jednak nazwy zmiennej zacz▒µ cyfr▒! Wszystkie zmienne w PHP wyr≤┐nia siΩ od pozosta│ych element≤w poprzedzaj▒c ich nazwy znakiem dolara $. Oto przyk│adowe zmienne:

$imie, $x, $a1, $SUPER, $telefon, $nazwa_procedury

Wielko╢µ liter nazw zmiennych w PHP ma istotne znaczenie. Zmienna $x i $X, to dwie r≤┐ne zmienne.

W PHP nie ma konieczno╢ci deklaracji i ustalania typ≤w dla zmiennych. U┐ywamy ich wtedy, kiedy s▒ nam potrzebne i zazwyczaj nie ustalamy jawnie, jakiego typu danej zmienna ma przetrzymywaµ. Interpreter PHP sam siΩ "domy╢la", co przetrzymujemy w zmiennej. Je╢li jest to liczba rzeczywista (z u│amkiem) automatycznie ustali typ zmiennej na double, je╢li ca│kowita liczba to integer, a je╢li tekst to string. S▒ jeszcze inne typy:

Czasami jednak zachodzi konieczno╢µ ustalenia typ≤w dla zmiennych (np. interpreter siΩ myli ;). Do dyspozycji mamy w≤wczas dwie metody ustalania typ≤w danych. Jedn▒ z nich jest u┐ycie funkcji settype, a drug▒ u┐ycie odpowiedniej funkcji konwersji: intval, doubleval lub strval. Poni┐ej zamie╢ci│em przyk│ad z komentarzami, kt≤ry dok│adnie demonstruje u┐ywanie zmiennych i wspomniane funkcje:

<html>
<head>
  <title>Tworzenie zmiennych - typy danych</title>
</head>
<body>
  <?

    $imie
="Karol";
      
// teksty wstawiamy w cudzys│owach
      // lub apostrofach

    
echo "Moje imie to: $imie <br>";
      
    
$Temp="3.14 to PI";
      
// zmienna $Temp jest typu tekstowego

    
echo "Zawartosc zmiennej temp= $Temp <br>";

    
settype($Temp,"double");
    echo 
"Teraz ustawilismy jej typ na rzeczywisty: temp= $Temp <br>";

    
settype($Temp,"integer");
    echo 
"Teraz ustawilismy jej typ na calkowity: temp= $Temp <br>";

    
settype($Temp,"string");
    echo 
"Teraz ustawilismy jej typ ponownie na lancuchowy: temp= $Temp <br>";


    echo 
"<br>Teraz zademonstrujemy funkcje: strval<br>";
     
// pozostale, tzn. intval i doubleval uzywamy tak samo

    
$Temp="3.14 to PI";
    echo 
"Jako lancuch: $Temp <br>";

    echo 
"Jako calkowita ";
    echo 
intval($Temp);
    echo 
"<br>";
    echo 
"Ponownie wartosc zmiennej Temp: $Temp";

  
?>
</body>
</html>


Teraz jeszcze troche wyja╢nie±. Czym siΩ r≤┐ni umieszczenie tekstu w apostrofach, a czym w cudzys│owach. Ot≤z pierwszy ze sposob≤w (nie by│ jeszcze u┐ywany) powoduje zapamiΩtanie (je╢li w zmiennych) lub wy╢wietlenie (je╢li w funkcjach do wy╢wietlania) danego tekstu w dok│adnie takiej formie, w jakiej go podali╢my. Podanie natomiast tekstu w cudzys│owach powoduje jego analizΩ i zawsze je╢li wyst▒pi tam gdzie╢ nazwa zmiennej (ze znakiem dolara), to wstawienie w jej miejsce faktycznej warto╢ci zmiennej (a nie napisu). W ten w│a╢nie spos≤b wy╢wietlamy na ekranie zawarto╢µ zmiennych.

Drug▒ spraw▒, na kt≤r▒ mog│e╢ zwr≤ciµ uwagΩ jest wy╢wietlenie, po okre╢leniu zmiennej na string tylko liczby. Sta│o siΩ tak dlatego, ┐e wcze╢niej wykonane funkcje (konwersja na double, a p≤╝niej integer) uciΩ│y z naszej zmiennej wszystko co by│o tekstem i pozosta│a tylko cyfra 3. Je╢li nie chcemy "niszczyµ" zawarto╢ci zmiennej, a jednak chcemy wy╢wietliµ jej zawarto╢µ w inny spos≤b u┐ywajmy funkcji intval itd.

--------------------
ZasiΩg
--------------------

Miejsce, w kt≤rym dana zmienna zostanie u┐yta pierwszy raz, okre╢la jednocze╢nie jej zasiΩg, czyli obszar w kt≤rym bΩdzie widoczna. Wszystkie zmienne u┐yte (pierwszy raz) wewn▒trz jakiej╢ funkcji widoczne s▒ tylko w jej obrΩbie. Istniej▒ r≤wnie┐ zmienne globalne, kt≤re s▒ widoczne poza funkcjami (a wewn▒trz ich niewidoczne). By zmienna globalna by│a widoczna wewn▒trz funkcji trzeba to jawnie okre╢liµ u┐ywaj▒c s│owa global. Demonstruje to poni┐szy przyk│ad:

<html>
<head>
  <title>Widoczno╢µ zmiennych</title>
</head>
<body>
  <?

    
function Pierwsza($x)
    {
      
// $x jest zmienna lokalna

      
echo "Funkcja PIERWSZA: x= $x <br>";
    }
    function 
Druga()
    {
      
$x="Binboy";
      
// $x jest zmienna lokalna

      
echo "Funkcja DRUGA: x= $x <br>";
    }
    function 
Trzecia()
    {
      global 
$x;
      
// $x jest zmienna globalna

      
echo "Funkcja TRZECIA: x= $x <br>";
    }

    
$x="www.binboy.com.pl";

    
Pierwsza("Karol");  // wyswietli napis Karol
    
Druga();            // wyswietli napis Binboy
    
Trzecia();          // wyswietli adres strony

  
?>
</body>
</html>


--------------------
Sta│e
--------------------

W PHP mamy r≤wnie┐ mo┐liwo╢µ definiowania sta│ych. Ka┐da sta│a zachowuje siΩ podobnie jak zmienna, jednak jej warto╢µ nie mo┐e byµ zmieniana. Do tworzenia sta│ych u┐ywamy s│owa define w nastΩpuj▒cy spos≤b:

define("NAZWA_STALEJ","JEJ WARTOª╞");

Wszystkie sta│e piszemy wielkimi literami (nie jest to wym≤g, ale tak ju┐ siΩ przyjΩ│o) i nie poprzedzamy ich znakiem dolara ($). Nie obowi▒zuje je r≤wnie┐ zakres widzialno╢µ. S▒ widoczne we wszystkich czΩ╢ciach naszego programu (nie u┐ywamy s│owa global).