Rozdział 2. ♦ Znaczniki, zmienne i typy danych 59
powoduje, że zmienna napi s otrzymuje typ stri ng. Wynika z tego również, że ponowne przypisanie do zmiennej, np. wartości całkowitej, spowoduje zmianę jej typu, czyli:
<?php
Snapis = "napis"
//w tyra miejscu zmienna napis jest typu string Snapis = 1
//w tym miejscu zmienna napis jest typu integer
Spróbujmy teraz wykonać skrypt widoczny na listingu 2.22. Jaki będzie efekt jego działania? W pierwszej chwili możemy spodziewać się, że wartością zmiennej napis3 będzie ciąg znaków powstały z połączenia ciągów zapisanych w zmiennych napisl i napi s2. Wynikiem jest jednak 0! Dlaczego?
Listing 2.22. Efekt użycia operatora + na zmiennych typu string_
<html>
<head>
<ti 11e>Przykładowa strona</ti 11e> </head>
<body>
<?php
Snapisl - "napis pierwszy”: SnapisŻ - "napis drugi":
$napis3 - Snapisl + Snapisż: echo ("Snapis3"):
?>
</body>
</html>
Popełniliśmy oczywiście błąd, na który szczególnie narażone są osoby programujące wcześniej w językach takich jak np. JavaScript. Otóż w PHP operator + jest arytmetycznym operatorem dodawania i nie można go wykorzystać do dodawania zmiennych niearytmetycznych, takich jak łańcuchy znakowe. Co się zatem stało w powyższym skrypcie i dlaczego wynikiem operacji jest wartość 0? Otóż po wykryciu, że ma zostać wykonana operacja dodawania arytmetycznego, nastąpiła automatyczna konwersja obu wartości reprezentowanych przez napisl i napis2 na typ arytmetyczny. Ponieważ jednak żaden z napisów nie zawiera ciągu znaków, który mógłby przedstawiać wartość całkowitą lub rzeczywistą wynikiem tej konwersji, w obu przypadkach, jest wartość arytmetyczna 0. Oczywiście wynikiem dodawania 0 + 0 jest również 0. Stąd wynik całej operacji. Jeszcze w tym rozdziale przekonamy się, jakie reguły rządzą konwersjami w przypadku różnych typów danych oraz w jaki sposób sami możemy dokonywać konwersji.
Może się zdarzyć, że będziemy chcieli zmienić typ danych, np. tak aby mieć pewność, że nowa zmienna będzie określonego typu. Można tego dokonać za pomocą techniki rzutowania. Odbywa się to podobnie, jak w klasycznych językach programowania,