Sobes.tech
Junior

PHP-də dinamik tipləşdirmə necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

PHP dinamik və zəif tipli bir dildir.

  • Dinamik tipləşdirmə: Bir dəyişənin tipi, ona təyin olunan dəyərə əsasən icra zamanı müəyyən edilir və əvvəlcədən açıq şəkildə elan edilmir.
  • Zəif tipləşdirmə: PHP, bəzən qeyri-adi davranışlara səbəb ola biləcək qeyri-şərti tip çevirmələri (kontekstual konvertasiya) edə bilər, bu da müxtəlif tiplərdəki dəyərlər arasında müqayisə və ya əməliyyatlar zamanı baş verə bilər.

Nümunələr:

  1. Dəyişənin tipinin dəyişdirilməsi:
    <?php
    $variable = 123;    // int
    $variable = "salam"; // string
    $variable = [1, 2]; // massiv
    ?>
    
  2. Müqayisədə qeyri-şərti tip çevirməsi:
    <?php
    var_dump(10 == "10"); // bool(true) - "10" stringi ədədə çevrilir
    var_dump(0 == false); // bool(true) - false ədədə çevrilir
    var_dump("abc" == 0); // bool(true) - "abc" stringi ədədə çevrilir, çünki ədədlə başlamır
    ?>
    
  3. Qəti müqayisə istifadə edərək qeyri-şərti çevirməni qarşısını almaq:
    <?php
    var_dump(10 === "10"); // bool(false) - həm dəyər, həm də tip üzrə müqayisə edilir
    var_dump(0 === false); // bool(false)
    var_dump("abc" === 0); // bool(false)
    ?>
    

Dinamik tipləşdirmə elastiklik təmin edir və erkən mərhələlərdə inkişafı sürətləndirir, lakin yalnız icra zamanı aşkarlanabilən səhvlərə səbəb ola bilər. Kodun etibarlılığını artırmaq üçün PHP 7+ ilə tip bəyanatları (type declarations) və qəti tip rejimi (strict types) təqdim olunmuşdur.

<?php
declare(strict_types=1); // Cari fayl üçün qəti tip rejimini aktivləşdirir

function sum(int $a, int $b): int { // arqument və dönüş tipi bəyanatı
    return $a + $b;
}

// sum(1, "2"); // Bu, qəti rejimdə TypeError xətası ilə nəticələnəcək

?>

Tip bəyanatları və qəti tip rejimi, statik analiz və ya funksiyanı çağırmadan əvvəl icra zamanı tip yoxlamalarını həyata keçirməyə imkan verir, bu da daha proqnozlaşdırıla bilən və saxlanması asan kod yazmağa kömək edir.