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