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) |
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.
$foo = 10; // $foo jest liczbą całkowitą |
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':
Poprzedni | Spis treści | Następny |
Typ NULL (null) | Początek rozdziału |