Sobes.tech
Intern

Ako sa v PHP odovzdávajú premenné?

sobes.tech AI

Odpoveď od AI

Premenné v PHP sa predvoleným spôsobom odovzdávania sú odovzdávané hodnotou. To znamená, že pri priraďovaní hodnoty jednej premennej inej alebo pri odovzdávaní premennej do funkcie sa vytvorí kópia hodnoty. Zmeny v tejto kópii neovplyvňujú pôvodnú premennú.

Avšak, premenné môžu byť tiež odovzdávané odkazom. V takom prípade sa namiesto kópie hodnoty odovzdá ukazovateľ na rovnakú oblasť pamäti ako pôvodná premenná. Zmeny vykonané prostredníctvom odkazu priamo ovplyvňujú pôvodnú premennú.

Odovzdávanie odkazom sa používa:

  • Priraďovanie odkazom: Použitie operátora priradenia s ampersandom (=&).

    // Priraďovanie odkazom
    $a = 10;
    $b =& $a;
    $b = 20; // Zmena $b tiež zmení $a
    // $a je teraz 20
    
  • Odovzdanie argumentu funkcii odkazom: Pridanie ampersandu (&) pred názov parametra v definícii funkcie.

    <?php
    // Funkcia, ktorá prijíma argument odkazom
    function modifyValue(&$value) {
        $value *= 2;
    }
    
    $number = 5;
    modifyValue($number);
    // $number je teraz 10
    ?>
    
  • Vrátenie hodnoty odkazom z funkcie: Použitie ampersandu (&) pred názvom funkcie v jej definícii.

    <?php
    // Funkcia, ktorá vracia hodnotu odkazom
    function &getReference() {
        static $value = 0;
        $value++;
        return $value;
    }
    
    $a = &getReference();
    $a = 100; // Zmena $a tiež zmení statickú premennú vo vnútri funkcie
    
    $b = &getReference(); // $b teraz odkazuje na rovnakú statickú premennú (rovná sa 101)
    ?>
    

Je dôležité poznamenať, že niektoré dátové typy, ako objekty, sa vždy odovzdávajú odkazom (presnejšie povedané, odovzdáva sa odkaz na objekt). Pri priraďovaní jedného objektu inému, obe premenne odkazujú na rovnakú inštanciu objektu.

Metóda odovzdania Ako funguje Použitie
Podľa hodnoty Vytvorí sa kópia hodnoty Predvolené správanie, bezpečné pre pôvodnú premennú
Podľa odkazu Odovzdá sa ukazovateľ na pamäť Zmeny priamo ovplyvňujú pôvodnú premennú