Sobes.tech
Junior

Kaip veikia dinaminis tipavimas PHP?

sobes.tech AI

Atsakymas iš AI

PHP — tai dinaminė, silpnos tipizacijos kalba:

  • Dinaminė tipizacija: Kintamojo tipas nustatomas vykdymo metu, remiantis jam priskirta verte, o ne iš anksto deklaruojamas.
  • Silpna tipizacija: PHP gali atlikti neaiškų tipų konvertavimą (kontekstinę konversiją), kas kartais gali sukelti netikėtą elgesį lyginant ar atliekant operacijas tarp skirtingų tipų reikšmių.

Pavyzdžiai:

  1. Tipo keitimas:
    <?php
    $variable = 123;    // int
    $variable = "hello"; // string
    $variable = [1, 2]; // array
    ?>
    
  2. Neaiškus tipų konvertavimas lyginant:
    <?php
    var_dump(10 == "10"); // bool(true) - eilutė "10" konvertuojama į skaičių 10
    var_dump(0 == false); // bool(true) - false konvertuojama į skaičių 0
    var_dump("abc" == 0); // bool(true) - eilutė "abc" konvertuojama į skaičių 0, nes ji nepradedama skaičiumi
    ?>
    
  3. Griežtas lyginimas, siekiant išvengti neaiškios konversijos:
    <?php
    var_dump(10 === "10"); // bool(false) - lyginama tiek reikšmė, tiek tipas
    var_dump(0 === false); // bool(false)
    var_dump("abc" === 0); // bool(false)
    ?>
    

Nors dinaminė tipizacija suteikia lankstumo ir pagreitina kūrimo procesą pradžioje, ji gali sukelti klaidų, kurios nustatomos tik vykdymo metu. Kodo patikimumą didinti padėjo PHP 7+ įvestos tipų deklaracijos ir griežtas režimas:

<?php
declare(strict_types=1); // Įjungia griežtą režimą šiuo failu

function sum(int $a, int $b): int { // Tipų deklaracijos ir grąžinamosios vertės nurodymas
    return $a + $b;
}

// sum(1, "2"); // Tai sukels TypeError griežtame režime

?>

Tipų deklaracijos ir griežtas režimas leidžia atlikti tipų patikrinimą statinio analizės ar vykdymo metu, kas prisideda prie labiau prognozuojamo ir palaikomo kodo rašymo.