2016-10-17 5 views
2

Der folgende Code arbeitetMerge Superglobal mit dynamischen Namen

<?php 
print_r(array_merge(${"_".$_SERVER['REQUEST_METHOD']}, $_GET)); 
?> 

Aber wenn ich diesen Code in einer Funktion oder Klasse verwendet wird, ist es ein Problem

<?php 
class Request { 
    public static function init() { 
     return array_merge(${"_".$_SERVER['REQUEST_METHOD']}, $_GET); 
    } 
} 

print_r(Request::init()); 
?> 

Das Ergebnis ein leeres Array zurück mit 2 Fehler:

  • Hinweis: Undefined variable: _GET in on line 4
  • Warnung: array_merge(): Argument # 1 ist kein Array in der Linie 4

Die Warnung ist logisch, aber ich verstehe nicht, die Mitteilung. Ist jemand jemals auf dieses Problem gestoßen? Gibt es eine Lösung? Ein Problem im PHP-Kern?

Antwort

1

Vom documentation (unten auf der Seite):

Bitte beachten Sie, dass variable Variablen nicht mit PHP superglobale Arrays innerhalb von Funktionen oder Klassenmethoden verwendet werden. Die Variable $ this ist ebenfalls eine spezielle Variable, auf die nicht dynamisch referenziert werden kann.

Statt Variable variabler Syntax verwenden: $GLOBALS superglobal

<?php 
class Request { 
    public static function init() { 
     return array_merge($GLOBALS["_".$_SERVER['REQUEST_METHOD']], $_GET); 
    } 
} 

print_r(Request::init()); 
?> 
+0

Es ist eine Möglichkeit, aber das beantwortet nicht die Frage. Eine Lösung, die wir bereits besprochen hatten, ty. –

+0

Warum muss $ GLOBALS anstelle von $ sign verwendet werden? –

+0

@YohannTilotti: Ich habe die Antwort aktualisiert. –

Verwandte Themen