2016-07-21 8 views
2

Ich versuche, PHP-Klassen zu lernen, und in meiner ersten Klasse allready Mühe Ich habe ..Wenn es möglich zu verwenden filter_input (POST oder GET) Funktion innerhalb einer Klasse in PHP

Code-Beispiel:

class Loader 
{ 
    public $action = filter_input(INPUT_GET, "action"); 
    public $dir = ''; 
    public $exceptions = ''; 
    function __construct($exceptions, $dir) 
    { 
     if(count($exceptions) > 0){ 
      if(isset($exceptions[$this->action])){ 
       $this->req($exceptions[$this->action]); 
      }else{ 
       $this->req($this->action); 
      } 
     } 
     require($args[$action].".php"); 
    } 
    public function req($this->action, $dir){ 
     require($dir.$action.".php"); 
    } 
} 

Und es mag mit:

$e = array('task-list' => 'list', 'task-info' => 'info'); 
$loader = new Loader($e); 

Ist es möglich, $ Aktion innerhalb einer Klasse mit $ _REQUEST Variablen zu definieren? Oder ich sollte es wie verwenden:

+0

Das ist eine Frage der Stellungnahme ist. Manche ziehen es vor, Super Globals außerhalb des Unterrichts zu halten, andere betrachten sie als Teil der Sprache. Ich nähere mich immer so: Wenn ich einen Testfall für diese Klasse schreiben würde, könnte ich ihn leicht mit irgendwelchen Testdaten initialisieren, die ich vielleicht verwenden möchte? Normalerweise stoße ich an diesem Punkt auf Probleme mit einem super globalen Einsatz. –

+0

, aber ich erhalte einen Fehler in 'Parse Fehler: Syntaxfehler, unerwartet '(', erwartet ',' oder ';' in Zeile' wo $ Aktion definiert ist. – AlexIL

+0

Ah sorry. Verpasst das irgendwie. Betrachten Sie die Reihenfolge der Ausführung: 'neues Objekt' ->' __construct() 'wird ausgeführt -> kehrt zu Ihrem Code zurück ->' $ loader-> action = foo' wird ausgeführt -> '$ loader-> load()' wird ausgeführt Aktion NACH dem Konstruktor ran. Setzen Sie die Verwendung von '$ this-> action' in die 'load()' Methode oder geben Sie sie als Argument an den Konstruktor. –

Antwort

2

Sie können eine Funktion nicht verwenden, wenn Sie eine Eigenschaft deklarieren. Sie werden es so im Konstruktor zu tun haben:

class Loader 
{ 
    public $action; // Removed it from here 
    /* ... */ 
    function __construct($exceptions, $dir) 
    { 
     $this->action = filter_input(INPUT_GET, "action"); 
         //^and placed it down here. 

     /* ... */ 
    } 

    /* ... */ 
} 

Reference

Verwandte Themen