Hey guys,

Ik heb wat grappigs ontdekt en ik ben benieuwd of iemand het kan verklaren.

<?php

// ik stop de $_SERVER array in een variabele
$server = $_SERVER;

// ik unset de $_SERVER array, die bestaat dus niet meer
unset($_SERVER);

// ik creƫer een nieuwe $_SERVER variabele en geef 'm de waarde van $server
$_SERVER = $server;

// ik maak een test class met een functie waarin ik de $_SERVER variabele var_dump

class Test {

public function testServer() {
var_dump($_SERVER);
}

}

$test = new Test();
$test->testServer();

?>
Tadaaa.... de gegevens uit de $_SERVER array worden gewoon getoond. Logisch zul je misschien denken, maar de grap is dat ik de $_SERVER array eerst heb ge-unset en daarna opnieuw heb aangemaakt. Bij het opnieuw aanmaken heb ik niet aangegeven dat het om een GLOBAL gaat. Toch is de nieuwe $_SERVER variabele bereikbaar in de test class. Betekent dit dat PHP er automatisch er een global van maakt?
PHP zegt

This is a 'superglobal', or automatic global, variable. This simply means that it is available in all scopes throughout a script.

Ik denk dat je een superglobal niet kan unsetten. heb je $_SERVER geprint op je scherm na het unsetten? is die dan leeg?
Ja, hij is hartstikke leeg (NULL), hahaha... vaag toch? :-s
Het zijn nog altijd variabele, wat betekend dat ze een variabele waarden hebben. Het heeft al een waarde, en is automatisch een global (op basis van de variabele naam), verder is het niet speciaal.

http://3v4l.org/PRGcP

Doet me een beetje denken aan undefined behavior bij C/C++ of binnen Java via reflection de waarde van een string aanpassen.

Reageren