Gå til innhold

copy by ref ELLER copy by value


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet

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 */

?>

Skrevet

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

Skrevet
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.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...