Sobes.tech
Junior

Ինչպես է աշխատում դինամիկ տիպավորումը PHP-ում?

sobes.tech AI

Պատասխան AI-ից

PHP-ը՝ դա դինամիկ, թույլ տիպավոր լեզու է:

  • Դինամիկ տիպավորում: Տիպը որոշվում է գործարկման ժամանակ՝ հիմնվելով տիպին, որը վերագրում է, այլ ոչ թե նախապես հռչակված:
  • Թույլ տիպավորում: PHP-ն կարող է կատարել անուղղակի տիպափոխումներ (կոնտեքստային փոխարկում), ինչը երբեմն կարող է հանգեցնել անսպասելի վարքագծի տարբեր տիպերի արժեքների համեմատության կամ գործողությունների ժամանակ:

Օրինակներ:

  1. Տիպի փոփոխություն:
    <?php
    $variable = 123;    // int
    $variable = "hello"; // string
    $variable = [1, 2]; // array
    ?>
    
  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 խստիվ ռեժիմում

?>

Տիպերի հայտարարություններն ու խստիվ ռեժիմը թույլ են տալիս իրականացնել տիպերի ստատիկ վերլուծություն կամ գործարկման ժամանակ՝ նախքան ֆունկցիայի գործարկումը, ինչը նպաստում է ավելի կանխատեսելի և պահպանվող կոդի գրությանը։