Sobes.tech
Junior

Jak działa dynamiczne typowanie w PHP?

sobes.tech AI

Odpowiedź od AI

PHP to język z dynamicznym, słabym typowaniem.

  • Typowanie dynamiczne: Typ zmiennej jest określany podczas wykonywania na podstawie przypisanej wartości, a nie deklarowany jawnie z wyprzedzeniem.
  • Słabe typowanie: PHP może wykonywać niejawne konwersje typów (konwersję kontekstową), co czasami może prowadzić do nieoczekiwanego zachowania podczas porównań lub operacji między wartościami różnych typów.

Przykłady:

  1. Zmiana typu zmiennej:
    <?php
    $variable = 123;    // int
    $variable = "cześć"; // string
    $variable = [1, 2]; // tablica
    ?>
    
  2. Niejawna konwersja typów podczas porównania:
    <?php
    var_dump(10 == "10"); // bool(true) - łańcuch "10" jest konwertowany na liczbę 10
    var_dump(0 == false); // bool(true) - false jest konwertowane na liczbę 0
    var_dump("abc" == 0); // bool(true) - łańcuch "abc" jest konwertowany na liczbę 0, ponieważ nie zaczyna się od liczby
    ?>
    
  3. Użycie ścisłego porównania, aby uniknąć niejawnej konwersji:
    <?php
    var_dump(10 === "10"); // bool(false) - porównanie zarówno wartości, jak i typu
    var_dump(0 === false); // bool(false)
    var_dump("abc" === 0); // bool(false)
    ?>
    

Chociaż dynamiczne typowanie zapewnia elastyczność i przyspiesza rozwój na wczesnych etapach, może prowadzić do błędów, które wykrywane są tylko podczas wykonywania. Aby zwiększyć niezawodność kodu, w PHP 7+ wprowadzono deklaracje typów (type declarations) i tryb ścisłego typowania (strict types).

<?php
declare(strict_types=1); // Włącza tryb ścisłego typowania dla bieżącego pliku

function sum(int $a, int $b): int { // Deklaracja typów argumentów i wartości zwracanej
    return $a + $b;
}

// sum(1, "2"); // Spowoduje to błąd typu (TypeError) w trybie ścisłym

?>

Deklaracje typów i tryb ścisłego typowania pozwalają na wykonywanie kontroli typów na etapie analizy statycznej lub podczas wykonywania przed wywołaniem funkcji, co przyczynia się do pisania bardziej przewidywalnego i łatwego w utrzymaniu kodu.