Gå til innhold

copy by ref ELLER copy by value


Anbefalte innlegg

Noe jeg er usikker på. Når man overfører variabler i php, hva er det som går med referanse, og hva kopieres? Jeg trodde at alt gikk med referanse, men nå er jeg litt usikker.

 

Det er jo uønskelig å lage store objekter som man sender til ulike funksjoner og andre objekter med copy-by-value.

 

Og i samme gate så er jeg usikker på bruken av & tegnet. For i php så forstår jeg det som at man kun oppretter et alias til dataene. hmm

 

litt forvirret

Lenke til kommentar
Videoannonse
Annonse

Og i samme gate så er jeg usikker på bruken av & tegnet. For i php så forstår jeg det som at man kun oppretter et alias til dataene. hmm

 

5725919[/snapback]

 

&-tegnet i php brukes for å lage et alias på en variabel.

hvis jeg sier at

 

$ting = "Ting";
$tang = $ting; /* her er $ting og $tang to ulike variabel med forskjellige navn.*/
print $tang;
$tull = $tang; /* Her er $tull, $ting og $tang tre forskjellige variabler */

$ting ="Tull";
$tang = &$ting; /* Her er $tang og $ting samme variabel. Hvis $ting oppdateres gjør $tang det også */
$ting ="Hello";
print $tang; /* Her er $tang blitt til "hello", ikke "Tull", slik det opprinnelig var. */
print $tull;

 

&-tegnet brukes også til sende inn en variabel laget på utsiden av en funksjon, og da kan funksjonen endre verdien av denne variabelen. Hvis &-tegnet ikke brukes vil variabelen ikke bli oppdatert.

Har laget et lite eksempel:


<?
/*
* Variabel $a
*/
$a = 1;

/*
* Funksjon som bruker input $a og $b
* Lager egentlig en kopi av $a
* Denne funksjonen endrer IKKE variabelen $a
*/
function addWithoutReference($a, $b){
$a +=$b;
}

/*
* Funksjon som bruker input &$a og $c
* Siden $a sendes inn som "reference" endrer
* funksjonen den "globale" variabelen $a
*/
function add(&$a, $c){
$a += $c;
}
print ("\$a med initiell verdi: ". $a. "<br />\n"); /* Skriver ut $a med initiell verdi: 1*/
addWithoutReference($a, 3);
print ("Uten reference : \$a = ". $a. "<br />\n"); /* Skriver ut Uten reference : $a = 1 */
add($a, 3);
print ("Med reference: \$a = ". $a); /* Skriver ut Med reference: $a = 4 */

?>

Lenke til kommentar
Dette er hovbedforskjellen mellom php4 og php5 OOP, php4 kopierer objekter by reference, mens php5 kopierer by value,

5729380[/snapback]

Får da for all del håpe det er motsatt. Å sende et objekt "by value" er idiotisk og tilnærmet ubrukelig for å si det mildt.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...