Sobes.tech
Junior

Kuidas töötab dünaamiline tüüp PHP-s?

sobes.tech AI

Vastus AI-lt

PHP — see on dünaamiline, nõrk tüübitüüpidega keel:

  • Dünaamiline tüübitüüp: Muutuja tüüp määratakse käivitamise ajal, lähtudes talle omistatud väärtusest, mitte eelnevalt deklareeritud.
  • Nõrk tüübitüüp: PHP suudab teha varjatud tüüpide konversioone (konteksti konversioon), mis mõnikord võib põhjustada ootamatut käitumist väärtuste võrdlemisel või operatsioonide tegemisel erinevat tüüpi väärtustega.

Näited:

  1. Tüübi muutmine:
    <?php
    $variable = 123;    // int
    $variable = "hello"; // string
    $variable = [1, 2]; // array
    ?>
    
  2. Varjatud tüüpide konversioon võrdlemisel:
    <?php
    var_dump(10 == "10"); // bool(true) - string "10" konverteeritakse arvuks 10
    var_dump(0 == false); // bool(true) - false konverteeritakse arvuks 0
    var_dump("abc" == 0); // bool(true) - string "abc" konverteeritakse arvuks 0, kuna see ei alga arvuga
    ?>
    
  3. Rangeeritud võrdlus, et vältida varjatud konversiooni:
    <?php
    var_dump(10 === "10"); // bool(false) - võrreldakse nii väärtust kui ka tüüpi
    var_dump(0 === false); // bool(false)
    var_dump("abc" === 0); // bool(false)
    ?>
    

Dünaamiline tüübitüüp võimaldab paindlikkust ja kiirendab arendusprotsessi algfaasis, kuid võib põhjustada vigu, mis avastatakse ainult käivitamise ajal. Koodi usaldusväärsuse tõstmiseks on PHP 7+ versioonides kasutusele võetud tüüpide deklaratsioonid ja rangeeritud režiim:

<?php
declare(strict_types=1); // Lülitab sisse rangeeritud režiimi

function sum(int $a, int $b): int { // Tüüpide deklaratsioonid ja tagastustüüp
    return $a + $b;
}

// sum(1, "2"); // Tõstab TypeErrori rangeeritud režiimis

?>

Tüüpide deklaratsioonid ja rangeeritud režiim võimaldavad teha tüüpide kontrolli statilises analüüsis või käivitamise ajal, aidates kirjutada prognoositavamat ja hooldatavamat koodi.