Sobes.tech
Junior

Jak funguje dynamická typizace v PHP?

sobes.tech AI

Odpověď od AI

PHP je jazyk s dynamickým a slabým typováním.

  • Dynamické typování: Typ proměnné je určen během běhu na základě přiřazené hodnoty a není předem explicitně deklarován.
  • Slabé typování: PHP může provádět implicitní konverze typů (kontextová konverze), což může někdy vést k neočekávanému chování při porovnávání nebo operacích mezi hodnotami různých typů.

Příklady:

  1. Změna typu proměnné:
    <?php
    $variable = 123;    // int
    $variable = "ahoj"; // string
    $variable = [1, 2]; // pole
    ?>
    
  2. Implicitní konverze typů při porovnávání:
    <?php
    var_dump(10 == "10"); // bool(true) - řetězec "10" je převeden na číslo 10
    var_dump(0 == false); // bool(true) - false je převedeno na číslo 0
    var_dump("abc" == 0); // bool(true) - řetězec "abc" je převeden na číslo 0, protože nezačíná číslem
    ?>
    
  3. Použití přísného porovnání k zabránění implicitní konverzi:
    <?php
    var_dump(10 === "10"); // bool(false) - porovnává se jak hodnota, tak typ
    var_dump(0 === false); // bool(false)
    var_dump("abc" === 0); // bool(false)
    ?>
    

Ačkoliv dynamické typování nabízí flexibilitu a urychluje vývoj v raných fázích, může vést k chybám, které jsou odhaleny pouze za běhu. Pro zvýšení spolehlivosti kódu byly v PHP 7+ zavedeny deklarace typů (type declarations) a přísný režim typů (strict types).

<?php
declare(strict_types=1); // Aktivuje přísný režim typů pro aktuální soubor

function sum(int $a, int $b): int { // Deklarace typů argumentů a návratové hodnoty
    return $a + $b;
}

// sum(1, "2"); // To způsobí chybu typu (TypeError) v přísném režimu

?>

Deklarace typů a přísný režim umožňují provádět kontroly typů v rámci statické analýzy nebo během běhu před voláním funkce, což přispívá k psaní předvídatelnějšího a lépe udržovatelného kódu.