Looking for php Keywords? Try Ask4Keywords

PHP Doorgeven via referentie


Voorbeeld

Hiermee kunt u een variabele doorgeven aan de hand van een functie of element waarmee u de oorspronkelijke variabele kunt wijzigen.

Doorgeven door referentie is niet alleen beperkt tot variabelen, maar het volgende kan ook doorgegeven worden als referentie:

  • Nieuwe verklaringen, bijv. foo(new SomeClass)
  • Verwijzingen geretourneerd uit functies

arrays

Een veelgebruikt gebruik van "passeren door verwijzing" is om beginwaarden in een array te wijzigen zonder in de richting te gaan van het maken van nieuwe arrays of het vervuilen van uw naamruimte. Doorgeven door referentie is zo eenvoudig als het voorafgaan / voorvoegen van de variabele met een & => &$myElement .

Hieronder ziet u een voorbeeld van het benutten van een element uit een array en eenvoudig 1 toevoegen aan de oorspronkelijke waarde.

$arr = array(1, 2, 3, 4, 5);

foreach($arr as &$num) {
    $num++;
}

Wanneer u nu een element binnen $arr , wordt het oorspronkelijke element bijgewerkt naarmate de referentie werd verhoogd. U kunt dit verifiëren door:

print_r($arr);

Notitie

U moet er rekening mee houden bij het gebruik van pass by reference in lussen. Aan het einde van de bovenstaande lus bevat $num nog steeds een verwijzing naar het laatste element van de array. Het toewijzen van de postlus zal uiteindelijk het laatste array-element manipuleren! Je kunt ervoor zorgen dat dit niet gebeurt door het na de lus uit te zetten unset() :

$myArray = array(1, 2, 3, 4, 5);

foreach($myArray as &$num) {
   $num++;
}
unset($num);

Het bovenstaande zorgt ervoor dat u geen problemen tegenkomt. Een voorbeeld van problemen die hieruit kunnen voortvloeien, staat in deze vraag over StackOverflow .


functies

Een ander veelgebruikt gebruik voor het passeren door verwijzing is binnen functies. Het wijzigen van de oorspronkelijke variabele is zo eenvoudig als:

$var = 5;
// define
function add(&$var) {
    $var++;
}
// call
add($var);

Dit kan worden geverifieerd door de oorspronkelijke variabele te echo .

echo $var;

Er zijn verschillende beperkingen voor functies, zoals hieronder vermeld in de PHP-documenten:

Opmerking: er is geen verwijzingsteken op een functieaanroep - alleen op functiedefinities. Functiedefinities alleen zijn voldoende om het argument correct door te geven. Vanaf PHP 5.3.0 krijgt u een waarschuwing dat "call-time pass-by-reference" is verouderd wanneer u & in foo (& $ a); gebruikt. En vanaf PHP 5.4.0 is call-time pass-by-reference verwijderd, dus het gebruik ervan zal een fatale fout veroorzaken.