Avatar billede ulrik-nielsen Nybegynder
06. januar 2003 - 08:07 Der er 7 kommentarer og
1 løsning

Hvad gør "&" i function??

Jeg har set følgende i et script men jeg ved ikke helt hvad det gør:

function lock(&$fp) {
        flock($fp,LOCK_EX);
}

hvad gør "&" foran variablen i dette eksempel??
Avatar billede francodavid Nybegynder
06. januar 2003 - 08:31 #1
At det funktionen "ser" det der står inde i variabel sam værende det funktionen skal arbejde med, og ikke variabel navnet. Håber det ikke var for snørklet:)
Avatar billede francodavid Nybegynder
06. januar 2003 - 08:33 #2
http://www.php.net/manual/en/functions.arguments.php
Se under "Making arguments be passed by reference".
Avatar billede jakoba Nybegynder
06. januar 2003 - 10:49 #3
Det er nu altså omvendt :-))

uden & foran bliver det variablen indeholder kopieret hen et andet sted i ram og det funktionen får er så kopien. hvis funktionen ændrer værdien i sin parameter er det kun funktionen selv der kan se ændringen.

med & foran bliver indholdet at parameteren ikke kopieret. istedet får funktionen en pegepind til de data der de nu står. Hvis funktionen ændrer værdien i parameteren er det den oprindelige variabel der ændres.

prøv nedenstående med og uden & foran parameteren:

<?php

function testdet1( $parameter ) {
    echo "test nr 1 parameter før = " .$parameter ."<br>"
    $parameter = $parameter + 10;
    echo "test nr 1 parameter efter = " .$parameter ."<br>"
}

function testdet2( &$parameter ) {
    echo "test nr 2 parameter før = " .$parameter ."<br>"
    $parameter = $parameter + 10;
    echo "test nr 2 parameter efter = " .$parameter ."<br>"
}

$test = 25
echo "test før = " .$test ."<br>";
testdet1( $test );
echo "test midti = " .$test ."<br>";
testdet2( $test );
echo "test efter = " .$test ."<br>";

?>

det er ofte en god ide at lave sådan et lille test-program for at se om sproget virker som man tror.

mvh JakobA
Avatar billede jakoba Nybegynder
06. januar 2003 - 10:56 #4
Ups. der mangler ; tegn forenden af 5 linier ovenfor.
Avatar billede Slettet bruger
06. januar 2003 - 17:15 #5
& = Pass by reference
Uden & = Pass by value

Eksempel:

function add($foo) {
  $foo++;
}
$foo = 2;
add($foo);
echo $foo; # udskriver 2

function add(&$foo) {
  $foo++;
}
$foo = 2;
add($foo);
echo $foo; # udskriver 3
Avatar billede Slettet bruger
06. januar 2003 - 17:17 #6
(funktions navn 'add' er misvisende. burde nok hedde 'increment' i stedet)
Avatar billede ulrik-nielsen Nybegynder
06. januar 2003 - 18:36 #7
Who det er sq smart!!

Tak for svarene alle sammen!!
Avatar billede Slettet bruger
06. januar 2003 - 18:42 #8
Generelt er det iøvrigt performance-wise hurtigere at overføre pr reference end pr value, hvis der refereres til et objekt. Det er ikke hurtigere (men kan dog være nyttigt), hvis der refereres til en anden type (int, string, etc.).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester