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 .

 
$foo

 
=

 
"

 
0"

 
;

 
/

 
/

 
$foo

 
jest

 
łańcuchem

 
znaków

 
(ASCII

 
48

 
)

 
$foo

 
+=

 
2

 
;

 
/

 
/

 
$foo

 
jest

 
liczbą

 
całkowitą

 
(2

 
)

 
$foo

 
=

 
$foo

 
+

 
1.3

 
;

 
/

 
/

 
$foo

 
jest

 
liczbą

 
zmiennoprzecinkową

 
(3.3

 
)

 
$foo

 
=

 
5

 
+

 
"10

 
Małych

 
świnek"

 
;

 
/

 
/

 
$foo

 
jest

 
liczbą

 
całkowitą

 
(15

 
)

 
$foo

 
=

 
5

 
+

 
"10

 
Większych

 
świnek"

 
;

 
/

 
/

 
$foo

 
jest

 
liczbą

 
całkowitą

 
(15

 
)





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 aktualnie nieokreślone .

 
$a

 
=

 
1

 
;

 
/

 
/

 
$a

 
jest

 
liczbą

 
całkowitą

 
$a[0

 
]

 
=

 
"f"

 
;

 
/

 
/

 
$a

 
staje

 
się

 
tablicą

 
,

 
$a[0

 
]

 
zawiera

 
"f

 
"





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 :

 
$a

 
=

 
"

 
1"

 
;

 
/

 
/

 
$a

 
jest

 
łańcuchem

 
znaków

 
$a[0

 
]

 
=

 
"f"

 
;

 
/

 
/

 
Co

 
z

 
ofsetami

 
łańcuchów

 
?




 
Co

 
się

 
dzieje

 
?





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 .

 
$foo

 
=

 
10

 
;

 
/

 
/

 
$foo

 
jest

 
liczbą

 
całkowitą

 
$bar

 
=

 
(float

 
)

 
$foo

 
;

 
/

 
/

 
$bar

 
jest

 
typu

 
float

 
(zmiennoprzecinkowego

 
)





Operatory rzutowania następujące :



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 funkcjonalnie identyczne :

 
$foo

 
=

 
(

 
int

 
)

 
$bar

 
;

 
$foo

 
=

 
(

 
int

 
)

 
$bar

 
;





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 :

 
$var

 
=

 
'

 
ciao'

 
;

 
$arr

 
=

 
(array

 
)

 
$var

 
;

 
echo

 
$arr[0]

 
;

 
/

 
/

 
wynik

 
:

 
'ciao

 
'





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 ' :

 
$var

 
=

 
'

 
ciao'

 
;

 
$obj

 
=

 
(object

 
)

 
$var

 
;

 
echo

 
$obj

 
-

 
scalar

 
;

 
/

 
/

 
wynik

 
:

 
'ciao

 
'