Wykorzystywanie typów danychPodręcznik PHPPoprzedniRozdział 7. Typy danychNastępnyWykorzystywanie 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 są 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 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:
$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:
Konwersja
do typu boolowskiegoKonwersja do
liczb całkowitych
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'
PoprzedniSpis treściNastępnyTyp NULL (null)Początek rozdziałuZmienne
Wyszukiwarka
Podobne podstrony:
language types type jugglinglanguage types type jugglinglanguage types arraylanguage types resourcelanguage types resourcelanguage typeslanguage types objectlanguage types booleanlanguage types stringlanguage types integerlanguage types stringlanguage types floatlanguage types integerlanguage typeslanguage types objectlanguage types nullwięcej podobnych podstron