Wykorzystywanie
typów
danych
PHP
nie
wymaga
(
a
nawet
nie
obsługuje
)
jawnej
deklaracji
typów
zmiennych
.
Typ
zmiennej
jest
określany
na
podstawie
kontekstu
,
w
jakim
ta
zmienna
jest
używana
.
Oznacza
to
m.in.
,
że
przy
przypisaniu
łańcucha
znaków
do
zmiennej
var
,
zmienna
ta
zmienia
swój
typ
na
string
.
Jeśli
potem
zostanie
przypisana
wartość
całkowita
,
var
zmienia
swój
typ
na
integer
.
Przykładem
automatyczniej
konwersji
typów
jest
operator
dodawania
'
+
'
.
Jeśli
którykolwiek
z
operandów
jest
typu
float
,
to
wszystkie
operandy
zostaną
potraktowane
jako
liczby
float
i
taki
też
typ
będzie
zwrócony
jako
wynik
dodawania
.
W
przeciwnym
razie
operandy
zostaną
potraktowane
jako
liczby
całkowite
i
wynikiem
także
będzie
liczba
całkowita
.
Proszę
jednak
zwrócić
uwagę
,
że
działanie
to
NIE
zmienia
typów
samych
operandów
;
zmienia
jedynie
sposób
ich
interpretacji
przez
operator
dodawania
.
Jeśli
dwa
ostanie
przykłady
wydają
się
tobie
dziwne
,
zajrzyj
do
rozdziału
Konwersja
łańcuchów
znaków
.
Jeśli
chcesz
skonwertować
zmienną
z
jednego
typu
do
innego
,
użyj
rzutowania
typów
.
Aby
zmienić
typ
zmiennej
,
użyj
settype(
)
.
Jeśli
chcesz
przetestować
którykolwiek
z
przykładów
z
tego
rozdziału
,
możesz
użyć
funkcji
var_dump(
)
.
Notatka
:
Efekty
automatycznej
konwersji
do
tablicy
są
aktualnie
nieokreślone
.
W
powyższym
przykładzie
wydawać
się
może
oczywiste
,
że
$a
stanie
się
tablicą
z
pierwszym
elementem
"
f"
;
rozważ
jednak
poniższy
przykład
:
Ponieważ
PHP
obsługuje
indeksowanie
łańcuchów
za
pomocą
ofsetów
,
używając
tej
samej
składni
co
indeksowanie
tablic
,
powyższy
przykład
powoduje
problem
:
czy
$a
powinno
zostać
tablicą
z
pierwszym
elementem
o
wartości
"
f"
,
czy
raczej
"f
"
powinno
zostać
pierwszym
znakiem
łańcucha
$a
?
Z
tego
właśnie
powodu
,
od
PHP
3.0.12
i
PHP
4.0b3-RC4
,
efekt
automatycznej
konwersji
pozostaje
nieokreślony
.
Dyskusje
odnośnie
tego
problemu
trwają
.
Rzutowanie
typów
Rzutowanie
typów
w
PHP
działa
mniej
więcej
tak
jak
w
języku
C
:
nazwa
docelowego
typu
umieszczana
jest
w
nawiasach
przed
nazwą
zmiennej
,
która
ma
być
zrzutowana
.
Operatory
rzutowania
są
następujące
:
-
(
int)
,
(integer
)
-
rzutowanie
do
liczb
całkowitych
-
(
bool)
,
(boolean
)
-
rzutowanie
do
typu
boolowskiego
-
(
float)
,
(double)
,
(real
)
-
rzutowanie
do
liczb
zmiennoprzecinkowych
-
(
string
)
-
rzutowanie
do
łańcucha
znaków
-
(
array
)
-
rzutowanie
do
tablicy
-
(
object
)
-
rzutowanie
do
obiektu
Notatka
:
Zamiast
rzutować
zmienną
do
łańcucha
znaków
operatorem
,
można
też
umieścić
zmienną
w
cudzysłowie
podwójnym
.
Wewnątrz
nawiasów
operatora
rzutowania
mogą
znajdować
się
tabulacje
i
spacje
,
więc
poniższe
przykłady
są
funkcjonalnie
identyczne
:
Efekt
rzutowania
pomiędzy
niektórymi
typami
nie
zawsze
daje
spodziewany
wynik
.
Więcej
informacji
o
skutkach
rzutowania
w
rozdziałach
:
Przy
rzutowaniu
lub
wymuszeniu
konwersji
z
tablicy
do
łańcucha
znaków
,
rezultatem
będzie
słowo
Array
.
Przy
rzutowaniu
lub
wymuszeniu
konwersji
z
obiektu
do
łańcucha
znaków
,
rezultatem
będzie
słowo
Object
.
Przy
rzutowaniu
ze
zmiennej
skalarnej
lub
łańcucha
do
tablicy
,
wartość
zmiennej
stanie
się
pierwszym
elementem
tablicy
:
Przy
rzutowaniu
ze
zmiennej
skalarnej
lub
łańcucha
do
obiektu
,
wartość
zmiennej
stanie
się
właściwością
obiektu
;
właściwość
ta
będzie
nazywać
się
'scalar
'
: