Datové typy

Ačkoliv v PHP navenek neurčujeme datový typ proměnných, PHP interně používá tři základní typy: celá čísla (integer), desetinná čísla (double) a řetězce (string). Kromě základních datových typů existují i složitější, jmenovitě například pole (array), objekty (object) a třídy (class), těmi se dnes ale zabývat nebudeme.

Každá proměnná má svůj specifický datový typ, ačkoliv se může během skriptu měnit podle toho, jak se mění její hodnota nebo jak to předepisuje skript. Celá čísla (integer) zabírají v paměti 4 bajty a používají se pro prezentaci celých čísel v rozsahu přibližně od -2 miliard do +2 miliard. Desetinná čísla (double), také známá jako reálná čísla, se používají pro prezentaci čísel, která obsahují desetinnou tečku. Řetězce se používají pro prezentaci nečíselných hodnot, jako např. znaků, interpunkčních znamének, ale mohou také obsahovat čísla.

<?php

  $z 
7// celé číslo (integer)
  
$z 7.0// desetinné číslo (double)
  
$z 'sedm'// řetězec (string)
  
$z '7 hodin'// řetězec (string)
  
$z '7'// řetězec (string)

?>

PHP od verze 4.2.0 obsahuje také datový typ boolean, který vyjadřuje pouze hodnoty TRUE (pravda) a FALSE (nepravda). U celých čísel vyjadřuje nepravdu nulová hodnota, všechny nenulové hodnoty vyjadřují pravdu. Podobně u desetinných čísel vyjadřuje nepravdu číslo 0.0 a všechny jeho ekvivalenty (0.000) a všechny nenulové hodnoty vyjadřují pravdu. U řetězců vyjadřuje nepravdu prázdný řetězec, který je reprezentován párem apostrofů či uvozovek, mezi nimiž není žádný znak. Neprázdný řetězec vyjadřuje pravdu.

<?php

  
/* Celá čísla */
  
$a 1// TRUE (pravda)
  
$a 0// FALSE (nepravda)
  
$a 123456// TRUE (pravda)

  /* Desetinná čísla */
  
$b 0.0// FALSE (nepravda)
  
$b 0.0000// FALSE (nepravda)
  
$b 0.09// TRUE (pravda)
  
$b 8.54// TRUE (pravda)

  /* Řetězce */
  
$c 'text'// TRUE (pravda)
  
$c ''// FALSE (nepravda)

  /* Ostatní */
  
$x TRUE// Logické ANO
  
$x FALSE// Logické NE
  
$x NULL// Zvláštní případ proměnné bez hodnoty.

?>

Přetypování proměnných se děje v PHP většinou automaticky. Datový typ proměnné se mění podle toho, jakou hodnotu jí přiřadíte.

<?php

  $x 
1// $x je nyní celé číslo (integer)
  
$x '1'// $x je nyní řetězec (string)
  
$x 1.2// $x je nyní desetinné číslo (double)
  
?>

Pokud provádíte například číselné operace s řetězcem, PHP pro potřeby výpočtu automaticky přetypuje řetězec na číslo, takže se obsah proměnné obsahující řetězec nemusí nutně změnit.

<?php

  $a 
13;
  
$b '64BIT Procesor';

  
// $b bude vyhodnoceno jako číslo 64

  
echo $a $b// Vypíše: 77

?>

Ke konverzi řetězce na číslo dojde pouze v případě, že řetězec začíná platnou číselnou hodnotou. Potom bude řetězec vyhodnocen jako číselná hodnota, v ostatní případech bude vyhodnocen jako nula. Řetězec "3D grafika" by byl v numerické operaci vyhodnocen jako číslo 3, ale řetězec "Svět 3D" by byl vyhodnocen jako 0 (nula).

Operátor + (plus) slouží pro sčítání. Přesně opačný případ nastane v případě, že se tyto dvě proměnné pokusíte spojit pomocí operátoru . (tečka) jako řetězce.

<?php

  $a 
13;
  
$b '64BIT Procesor';

  
// $a bude vyhodnoceno jako řetězec

  
echo $a $b// Vypíše: 1364BIT Procesor

?>

Jako desetinné číslo bude řetězec vyhodnocen v případě, že desetinná hodnota (double) zabírá celý řetězec. Řetězce "3.4" a "-4.01" budou vyhodnoceny jako desetinná čísla 3.4 a -4.01. Pokud jsou v řetězci obsaženy jiné znaky než znaky desetinného čísla, bude řetězec vyhodnocen jako celé číslo. Řetězec "3.4 kg" bude vyhodnocen jako celé číslo 3, "-4.01 stupňů" jako celé číslo -4.

Přetypovávat proměnné můžete i vy sami.

<?php

  
/* Explicitní přetypování ve stylu jazyka C */

  
$e 11.2// $e je desetinné číslo

  
$e = (int)$e// $e je nyní celé číslo (s hodnotou 11)
  
$e = (double)$e// $e je nyní desetinné číslo (s hodnotou 11.0)
  
$e = (string)$e// $e je nyní řetězec (s hodnotou '11')

  /* Explicitní přetypování pomocí funkce settype() */

  
$f '22.4'// $f je řetězec

  
settype($f'int');
  echo 
$f// $f je nyní celé číslo (22)

?>

Další užitečné funkce pro práci s proměnnými jsou například isset(), gettype() a unset(). První z nich zjišťuje, jestli proměnná existuje, druhá zjišťuje její datový typ, a třetí proměnnou uvolňuje z paměti.

<?php

  
/* Zjištění datového typu */

  
$x 12;
  echo 
gettype($x); // Vypíše: integer (celé číslo)

  
$x '12 hodin';
  echo 
gettype($x); // Vypíše: string (řetězec)

  /* Zjištění existence proměnné */

  
echo isset($x); // Vypíše: 1 (proměnná existuje)
  
echo isset($y); // Nevypíše nic (proměnná neexistuje)

  /* Odstranění proměnné */

  
$z 10;
  echo 
$z// Vypíše: 10
  
unset($z);
  echo 
$z// Chyba (proměnná neexistuje)

?>

 

« Obsah učebnice