2016-07-21 14 views
2

にクラス内(POSTをまたはGET)filter_input使う機能することができれば...私はPHPクラスを習得しようとしている、と私の最初のクラスでは、私は出回っ悩みを持っているPHP

コード例:

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"); 
    } 
} 
そして、それは次のように使用して:

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

それは$ _REQUEST変数を持つクラス内の$アクションを定義することは可能ですか?または、次のように使用してください:

$e = array('task-list' => 'list', 'task-info' => 'info'); 
$loader = new Loader($e); 
$loader->action = filter_input(INPUT_GET, "action"); 
$loader->load(); 
+0

意見の問題であること。スーパーグローバルをクラスから除外することを好む人もいれば、言語の一部とみなす人もいます。私はいつもこのようにアプローチしています。このクラスのテストケースを書く場合、使用したいテストデータで簡単に初期化できますか?通常、その時点で私は超大域的な使用に問題を抱えています。 –

+0

しかし、$ Actionが定義されている 'Parse error:syntax error、unexpected '('、 'expecting'、 ';' in $ Line)のエラーが表示されます – AlexIL

+0

何かと不足しています。 '$ loader-> action = foo'が実行されます - >' $ loader-> load() 'が実行されます。アクション '$ this-> action'を' load() 'メソッドに入れて、コンストラクタに引数として渡してください –

答えて

2

プロパティを宣言するときに関数を使用することはできません。あなたは、このようなコンストラクタでそれを行う必要があるでしょう:

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

関連する問題