2016-07-12 3 views
0

私は以下のようなクラスコンストラクタを持っていますが(私はいくつかの変数を残しました)、しかし、オブジェクトを構築する方法と変数を投稿する方法はわかりません。私はこのコードを継承しているので、それはうまくいくのが分かっていますが、どういうわけか...誰かがここで何が起こっているか教えてください。どのようにしてオブジェクトを作成し、そのすべてのパラメータを設定できますか?コンストラクタでポスト変数を使用するには?

function __construct() 
{ 
$some variables set here 
$user_name = isset($_POST['user_name']) ? prepare_input($_POST['user_name'], true) : ''; 
    $password = isset($_POST['password']) ? prepare_input($_POST['password'], true) : ''; 
//some more post variables 

$this->wrongLogin = false;  
    if(!$this->IsLoggedIn()){ 
     if($submit_login == 'login'){ 
      if(empty($user_name) || empty($password)){ 
       if(isset($_POST['user_name']) && empty($user_name)){ 
        $this->loginError = '_USERNAME_EMPTY_ALERT';       
       }else if(isset($_POST['password']) && empty($password)){ 
        $this->loginError = '_WRONG_LOGIN'; 
       } 
       $this->wrongLogin = true;       
      }else{ 
       $this->DoLogin($user_name, $password, $remember_me); 
      } 
     }else{ 
      if(isset($_COOKIE[$this->cookieName])){ 
       parse_str($_COOKIE[$this->cookieName]); 
       if(!empty($type) && !empty($usr) && !empty($hash)){ 
        $this->accountType = $type; 
        $user_name = $usr; 
        $password = $this->Decrypt($hash, $this->passwordKey);     
        $this->DoLogin($user_name, $password, '2'); 
       } 
      }    
     } 
    }else if($submit_logout == 'logout'){ 
     $this->DoLogout(); 
    } 
+0

コンストラクタで$ _POST変数を使用しても問題ありません。どのような問題がありますか? –

+0

これらのパラメータがコンストラクタ定義の一部でない場合、オブジェクトを構築してポスト変数を設定するにはどうすればよいですか? –

+1

$ _POSTはグローバルであり、コンストラクタの一部であり、他のすべてです。 –

答えて

0

$ _POST変数は、いずれからもアクセスすることができますコンストラクタ、例:

<?php 
class my_class { 
    public $status;  // PROPERTY. 
    public $user;  // PROPERTY. 
    public $pass;  // PROPERTY. 
function __construct() 
{ $this->user = (isset($_POST["user"])) ? $_POST["user"] : ""; // PROPERTY. 
    $this->pass = (isset($_POST["pass"])) ? $_POST["pass"] : ""; // PROPERTY. 
    if ((strlen($this->user) == 0) || 
     (strlen($this->pass) == 0)) 
     $this->status = false; // PROPERTY. 
    else $this->status = true; // PROPERTY. 
} 
} 

$myc = new my_class(); 
$_POST["user"] = "abc"; // HERE $_POST VARIABLES ARE DEFINED AFTER 
$_POST["pass"] = "123"; // THE CLASS IS BEEN INSTANTIATED. 
if ($myc->status) 
    echo "Good"; 
else echo "Bad"; 
?> 

$ _POST変数がインスタンス化されたときに$ _POST変数が存在しなかったので、コンストラクタがそのプロパティに ""割り当てられたため、 "" Bad "が表示されます。

0

私はここで問題なのか分からないが、あなたは次のように行うことができます。

class MyClass { 
    public $var1; 
    public $var2; 

    function __construct($var1, $var2 = 5){ 
     $this->var1 = $var; 
     $this->var2 = $var2; 
    } 
} 

どこかにあなたのコード内

// we can skip passing 2nd parameter 
$myObject = new MyClass(10); 
+0

私が言ったように、ポスト変数がどのように満たされているのかよく分かりません。私は必要なすべての変数を使ってコンストラクタを作ることができると知っていますが、これは私の目的のためにもうまくいくはずです。オブジェクトを構築する方法と投稿変数を埋める方法を理解していないので、コンストラクタ。 –

+0

基本的には、何らかの形でコードを変更することはしません。コンストラクタ宣言のparamsなしで作業していますので、そのまま使用したいと思います。 –

+0

@NickCabrera POST配列user_nameとパスワードから2つの値をとります。このクラスのオブジェクトは、ユーザーがサインインフォームに記入した後に作成する必要があります。しかし、IsLoggedInと他の関数がどのように動作するかを理解するためには、フルクラス –

関連する問題