Junior
Kako funkcioniše dinamičko tipiziranje u PHP?
sobes.tech АИ
Одговор од АИ
PHP је језик са динамичким и слабим типизацијом.
- Динамичка типизација: Тип променљиве се одређује током извршавања на основу вредности која јој је додељена, а не експлицитно унапред.
- Слаба типизација: PHP може вршити нејасне конверзије типова (контекстуалну конверзију), што понекад може довести до неочекиваног понашања при поређењу или операцијама између вредности различитих типова.
Примери:
- Промена типа променљиве:
<?php $variable = 123; // int $variable = "здраво"; // string $variable = [1, 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, јер не почиње бројем ?> - Коришћење строге поређења за избегавање нејасне конверзије:
<?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 у строгом режиму
?>
Декларације типова и строги режим омогућавају извршавање провера типова током статичке анализе или током извршења пре позива функције, што доприноси писању предвидљивијег и одрживијег кода.