Junior
Ako funguje dynamické typovanie v PHP?
sobes.tech AI
Odpoveď od AI
PHP je jazyk s dynamickým a slabým typovaním.
- Dynamické typovanie: Typ premennej je určený počas behu na základe priradenej hodnoty a nie je deklarovaný explicitne vopred.
- Slabé typovanie: PHP môže vykonávať nepriame konverzie typov (kontextovú konverziu), čo môže niekedy viesť k nečakanému správaniu pri porovnávaní alebo operáciách medzi hodnotami rôznych typov.
Príklady:
- Zmena typu premennej:
<?php $variable = 123; // int $variable = "ahoj"; // string $variable = [1, 2]; // pole ?> - Nepriama konverzia typov pri porovnávaní:
<?php var_dump(10 == "10"); // bool(true) - reťazec "10" sa konvertuje na číslo 10 var_dump(0 == false); // bool(true) - false sa konvertuje na číslo 0 var_dump("abc" == 0); // bool(true) - reťazec "abc" sa konvertuje na číslo 0, pretože nezačína číslom ?> - Použitie prísneho porovnania na zabránenie nepriamej konverzie:
<?php var_dump(10 === "10"); // bool(false) - porovnáva sa ako hodnota, tak aj typ var_dump(0 === false); // bool(false) var_dump("abc" === 0); // bool(false) ?>
Hoci dynamické typovanie poskytuje flexibilitu a zrýchľuje vývoj v počiatočných fázach, môže viesť k chybám, ktoré sú odhalené iba počas behu. Na zvýšenie spoľahlivosti kódu boli v PHP 7+ zavedené deklarácie typov (type declarations) a prísny režim typov (strict types).
<?php
declare(strict_types=1); // Aktivuje prísny režim typov pre aktuálny súbor
function sum(int $a, int $b): int { // Deklarácia typov argumentov a návratovej hodnoty
return $a + $b;
}
// sum(1, "2"); // Toto spôsobí chybu typu (TypeError) v prísnom režime
?>
Deklarácie typov a prísny režim umožňujú vykonávať kontroly typov počas statickej analýzy alebo počas behu pred volaním funkcie, čo prispieva k písaniu predvídateľnejšieho a ľahšie udržiavateľného kódu.