Jᅵrn Andersen frembragte:
>>> 1 . Hvorfor er det kun variable, der mᅵ "pass by reference"?
>>> (altsᅵ hvad er den dybere mening?)
>>
>> Fra PHP manualen :
>> "The array. This array is passed by reference because it is modified by
>> the function. This means you must pass it a real variable and not a
>> function returning an array because only actual variables may be passed
>> by reference."
>
> Jeg tror det begynder (langsomt) at dᅵmre. Jeg mᅵ vist hellere (ved
> lejlighed) fᅵ lᅵst op pᅵ "by reference" og "by value" ...
>
>>> 2. Har I andre E_STRICT slᅵet til?
>>> Hvorfor/hvorfor ikke?
>>
>> Ja jeg vil gerne se alle slags beskeder.
>> Fordi sᅵ lᅵrer jeg mest og kan rette det og have den bedste kode.
>
> OK - ogsᅵ min tanke.
>
>
> Mvh. Jᅵrn
Nᅵr man "pass by value" oprettes en midlertidig variabel, som
indeholder vᅵrdien. Nᅵr man "pass by reference", anvendes samme
variabel der angives i parametren.
Eks:
$a = 7;
DoThis($a);
DoThis($a+2)
echo $a;
function DoThis($b) {
$b++;
echo $b;
}
inde i funktionen har $b samme vᅵrdi som $a, og funktionen skriver 8,
dernᅵst 10 - efter kaldet udskrives $a - altsᅵ 7
Man kan gᅵre pᅵ denne mᅵde, fordi parametren overfᅵrer vᅵrdien ("pass
by value" - $a+2 udregnes og gemmes i variablen $b internt i
funktionen).
ᅵndrer man funktionen, sᅵ den defineres til at tage parametren som
reference
function DoThis(&$b) {...}
er $b inde i funktionen den samme variabel som $a udenfor - det er
referancen til $a der overfᅵres.
Eksemplet vil (med den redefinerede funktion) fᅵrst skrive 8.
Dernᅵst vil det give en fejl, fordi $a+2 ikke har en referance (det er
ikke en variabel).
Hvis scriptet fortsatte, ville det dernᅵst udskrive 8 - fordi
funktionen har ᅵndret $b, som er samme variabel som $a, og $a har
derfor nu vᅵrdien 8.
Hᅵber det spreder lidt lys... :-Z
Pass by reference har to anvendelser.
Den ene er for at spare hukommelse - store arrays der overfᅵres som
vᅵrdi (pass by value), vil skulle duplikeres, hvorfor man kan "spare"
hukommelse ved at overfᅵre dem som reference (er ogsᅵ hurtigere,
svjv.).
Den anden er, hvis man har brug for en funktion, der returnerer mede
end een vᅵrdi.
$a = 10;
$b = 0;
$c = 0;
$d = MultiFunc($a, $b, $c);
echo $a."\n".$b."\n".$c."\n".$d;
function MultiFunc($a, &$e, &$f) {
$e = $a*5;
$f = $a*20;
return $a*$a;
}
Dette vil udskrive
10
50
200
100
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
Utils
http://sdccms.dk/ordbog/ http://sdccms.dk/mailfriend/
http://bredelund.dk CMS som det var meningen et sᅵdant skulle vᅵre