/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Variabler opfører sig som 'by reference' m~
Fra : MooreHojer


Dato : 15-08-08 00:37

Hej NG

Så vidt jeg ved er standarden for php at variabler "overdrager" deres
indhold 'by value' og at hvis man ønsker at gøre det 'by reference' skal man
prefixe variablen med en AndersAnd.

Derfor undre det mig at følgende kode opfører sig som den gør:
----------------------------------------------
//
//$_SESSION['redirectTo'] har værdien 'dummy1.php'
//

$redirectTo = html_entity_decode($_SESSION['redirectTo']);

echo "\$_SESSION['redirectTo'] = " . $_SESSION['redirectTo'] . "<br />";
echo "header(\"Location: $redirectTo\")<br />";

$_SESSION['redirectTo'] = "";

echo "header(\"Location: $redirectTo\")<br />";
echo "\$_SESSION['redirectTo'] = " . $_SESSION['redirectTo'] . "<br />";
----------------------------------------------


udskriver:
----------------------------------------------
$_SESSION['redirectTo'] = dummy1.php
header("Location: dummy1.php")
header("Location: ")
$_SESSION['redirectTo'] =
----------------------------------------------


mens jeg havde forventet at den udskrev:
----------------------------------------------
$_SESSION['redirectTo'] = dummy1.php
header("Location: dummy1.php")
header("Location: dummy1.php")
$_SESSION['redirectTo'] =
----------------------------------------------


--
MooreHojer


 
 
Bertel Lund Hansen (15-08-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 15-08-08 03:57

MooreHojer skrev:

> Så vidt jeg ved er standarden for php at variabler "overdrager" deres
> indhold 'by value'

Ja, men $_SESSION, $_POST og $_GET er globale arrays.

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

MooreHojer (15-08-2008)
Kommentar
Fra : MooreHojer


Dato : 15-08-08 06:35

> Ja, men $_SESSION, $_POST og $_GET er globale arrays.


Er globale arrays 'by reference'?
Kan man komme uden om det?

--
MooreHojer


MooreHojer (15-08-2008)
Kommentar
Fra : MooreHojer


Dato : 15-08-08 07:05

> Kan man komme uden om det?

Har fundet følgende løsning hvor jeg sætter en ekstra variabel ind som
mellemmand.

-----------------------------------
$redirectTo = $tmp = html_entity_decode($_SESSION['redirectTo']);

echo "\$_SESSION['redirectTo'] = " . $_SESSION['redirectTo'] . "<br />";
echo "header(\"Location: $redirectTo\")<br />";

$_SESSION['redirectTo'] = "";

echo "\$_SESSION['redirectTo'] = " . $_SESSION['redirectTo'] . "<br />";
echo "header(\"Location: $redirectTo\")<br />";
-----------------------------------


giver det "forventede" resultat:
-----------------------------------
$_SESSION['redirectTo'] = dummy1.php
header("Location: dummy1.php")
$_SESSION['redirectTo'] =
header("Location: ")
-----------------------------------


--
MooreHojer


Philip Nunnegaard (15-08-2008)
Kommentar
Fra : Philip Nunnegaard


Dato : 15-08-08 05:11

"MooreHojer" <simon@moorehojer.dk> skrev '

> $_SESSION['redirectTo'] = "";

Her har du jo sat $_SESSION['redirectTo'] lig med "", så den gør bare hvad
du har bedt om.


MooreHojer (15-08-2008)
Kommentar
Fra : MooreHojer


Dato : 15-08-08 06:38

>> $_SESSION['redirectTo'] = "";
>
> Her har du jo sat $_SESSION['redirectTo'] lig med ""

Og derfor forventede jeg også at en echo af den vil udskrive "", men kan
ikke helt forstå hvorfor $redirectTo også udskriver "".

--
MooreHojer


MooreHojer (15-08-2008)
Kommentar
Fra : MooreHojer


Dato : 15-08-08 08:45

> Hejsa.
>
> Kan det passe at du bruger register_globals? Prøv at kalde $redirectTo
> noget andet. Så bliver den nok ikke overskrevet af register_globals, når
> du sætter $_SESSION til "".
>
> --
> Med venlig hilsen
> Kasper Johansen

Det er også rigtigt....

Takker mange gange

--
MooreHojer


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste