dedlfix: Parameter-Namen beginnen mit einen [A-Za-z]

Beitrag lesen

echo $begrüßung;

Und außerdem stell Dir mal vor, was bei Register_Globals = ON in PHP aus einem rein numerischen Bezeichner werden würde...

Warum probierst du es nicht einfach aus?

Da Chris anscheinend keine Lust hat, seine Vorstellung nachzuprüfen, kommen hier meine Ergebnisse mit einem noch etwas erweitertem Testscript:

<form action="" method="post">  
  <input type="hidden" name="42" value="foobar">  
  <input type="hidden" name="x" value="y">  
  <input type="submit">  
</form>  
<pre>  
<?php  
//var_dump($42);  
echo '$x: ';  
var_dump($x);  
print_r($GLOBALS);  
  
$z = '42';  
echo '$$z: ';  
var_dump($$z);  
print_r($GLOBALS);  
?>

Hier die Ergebnisse:

//var_dump($42);

Liefert einen Syntax-Fehler, Variablennamen dürfen nicht mit einer Ziffer beginnen.

echo '$x: ';
  var_dump($x);

liefert erwartungsgemäß: $x: string(1) "y"

print_r($GLOBALS);

Die gekürzte Ausgabe liefert:

Array
(
    [HTTP_RAW_POST_DATA] => 42=foobar&x=y
    [42] => foobar
    [x] => y
    [_POST] => Array
        (
            [42] => foobar
            [x] => y
        )

Zugriff ist also über $_POST['42'] bzw. $_POST[42] möglich. Außerdem ist zu sehen, dass eine Variable mit Namen 42 im globalen Variablenbereich angelegt wird.
Der Zugriff ist über $42 wegen Systaxfehler nicht möglich. Vielleicht klappt es ja mit einer variablen Variablen.

$z = '42'; // oder auch $z = 42; also als Zahl statt String
  echo '$$z: ';
  var_dump($$z);

Und siehe da, die Ausgabe ist: $$z: string(6) "foobar"

print_r($GLOBALS);

Hier ändert sich nicht viel, nur ein  [z] => 42  kommt hinzu.

Mit variablen Variablen lassen sich also auch Variablen anlegen bzw. es lässt sich darauf zugreifen, deren Name nicht den Syntaxregeln entspricht.

Getestet habe ich mit PHP 4.3.11. Mit 5.0.4 gibt es eine  Notice: Undefined variable: 42  bei var_dump($$z); obwohl auch das $GLOBALS-Array die 42 enthält. $$z lässt sich auch ohne Probleme beschreiben und danach wieder auslesen, ohne weitere Beanstandungen seitens PHP. Die Ausgabe dieser Notice verwundert mich deshalb etwas ...

echo "$verabschiedung $name";