Toon posts:

[php] Variabele superglobals in functie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Met deze code doe ik eigenlijk niks, maar ik vraag me gewoon af wáárom het niet werkt.

Als ik onderstaande code niet in een functie e.d. plaats, werkt het :) :
PHP:
1
2
3
4
<?php
$varName = 'SERVER';
print_r(${'_' . $varName});
?>

Maar zodra ik die code in een functie plaats, werkt het niet meer :/ :
PHP:
1
2
3
4
5
6
7
8
<?php
function doSomething()
{
    $varName = 'SERVER';
    print_r(${'_' . $varName});
}
doSomething();
?>

code:
1
Notice: Undefined variable: _SERVER in c:\***\test.php on line 5
Ik snap echt niet waarom het dan opeens foute code is. Wat zie ik over het hoofd? :?

Ik gebruik PHP versie 4.2.2

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

de scope valt niet binnen de functie zo te zien

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Ja, maar waarom niet? Want het is immers een superglobal! ($_SERVER)

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Verwijderd schreef op 10 augustus 2002 @ 22:58:
Ja, maar waarom niet? Want het is immers een superglobal! ($_SERVER)


http://www.php.net/manual/en/reserved.variables.php

If the register_globals directive is set, then these variables will also be made available in the global scope of the script; i.e., separate from the $_SERVER and $HTTP_SERVER_VARS arrays. For related information, see the security chapter titled Using Register Globals. These individual globals are not autoglobals.

.edit: maar dit is het niet denk ik
vreemd

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Ik begrijp niet 100% wat er in dat Engelse stuk staat, maar register_globals heb ik op off staan, en deze fout treedt ook op als je in $varName een andere naam van een superglobal zet (bijv. POST, GET, COOKIE e.d.).

En dit werkt wel, wanneer ik er geen variabele superglobal van maak:
PHP:
1
2
3
4
5
6
7
<?php
function doSomething()
{
    print_r($_SERVER);
}
doSomething();
?>
Lekker vaag weer :(

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Volgens mij is $_SERVER wat anders dan ${'_SERVER'} dan is het ineens niet meer de super-global referentie naar de server-data vermoed ik.
Je zou het met een eval op kunnen lossen, maar ga je eerst bedenken waarom je het nodig hebt?

Ik kan me niet echt een reden voorstellen

  • Grum
  • Registratie: Juni 2001
  • Niet online
Please note that variable variables cannot be used with PHP's Superglobal arrays. This means you cannot do things like ${$_GET}. If you are looking for a way to handle availability of superglobals and the old HTTP_*_VARS, you might want to try referencing them.
Zie ook: http://www.php.net/variables.variable
Vlak boven de usercomments.

Verwijderd

Topicstarter
ACM schreef op 11 augustus 2002 @ 00:26:
[...]Je zou het met een eval op kunnen lossen, maar ga je eerst bedenken waarom je het nodig hebt?[...]
Ik zie inderdaad ook geen reden, maar ik kwam er toevallig op, en toen bevreemde met het dat het niet werkte :X.
Globaal werkt dat dus wél, maar in een functie e.d. inderdaad niet :(. Maar ik heb net ff bij de bugs op php.net gezocht, en hij staat er als bug tussen. Maar dat hebben ze nu dus ook in de manual geplaatst :).

Bedankt allemaal _/-\o_
Pagina: 1