Sobes.tech
Junior

Kako funkcioniše dinamičko tipiziranje u PHP?

sobes.tech АИ

Одговор од АИ

PHP је језик са динамичким и слабим типизацијом.

  • Динамичка типизација: Тип променљиве се одређује током извршавања на основу вредности која јој је додељена, а не експлицитно унапред.
  • Слаба типизација: PHP може вршити нејасне конверзије типова (контекстуалну конверзију), што понекад може довести до неочекиваног понашања при поређењу или операцијама између вредности различитих типова.

Примери:

  1. Промена типа променљиве:
    <?php
    $variable = 123;    // int
    $variable = "здраво"; // string
    $variable = [1, 2]; // масив
    ?>
    
  2. Нејасна конверзија типова при поређењу:
    <?php
    var_dump(10 == "10"); // bool(true) - низ "10" се конвертује у број 10
    var_dump(0 == false); // bool(true) - false се конвертује у број 0
    var_dump("abc" == 0); // bool(true) - низ "abc" се конвертује у број 0, јер не почиње бројем
    ?>
    
  3. Коришћење строге поређења за избегавање нејасне конверзије:
    <?php
    var_dump(10 === "10"); // bool(false) - пореди се како вредност, тако и тип
    var_dump(0 === false); // bool(false)
    var_dump("abc" === 0); // bool(false)
    ?>
    

Иако динамичка типизација пружа флексибилност и убрзава развој у раним фазама, може довести до грешака које се откривају само током извршавања. За побољшање поузданости кода у PHP 7+ уведене су декларације типова (type declarations) и строги режим типова (strict types).

<?php
declare(strict_types=1); // Активира строги режим типова за тренутни фајл

function sum(int $a, int $b): int { // Декларација типова за аргументе и повратну вредност
    return $a + $b;
}

// sum(1, "2"); // Ово ће изазвати TypeError у строгом режиму

?>

Декларације типова и строги режим омогућавају извршавање провера типова током статичке анализе или током извршења пре позива функције, што доприноси писању предвидљивијег и одрживијег кода.