2016-06-29 7 views
2
配列からローカル変数を生成するための抽出機能があります

エキス()

extract(['a' => 10, 'b' => 20]) // $a = 10, $b = 20 

何クリーンextract()機能のようなソリューションが、クラスメンバーのでしょうか?明らかに、私は次の行に沿って何かをすることができます:

class User { 
    private $user_id; 
    private $password; 
    private $email; 

    public function __construct($params) { 
    $this->user_id = isset($params['user_id']) ? $params['user_id'] : null; 
    $this->password = isset($params['password']) ? $params['password'] : null; 
    $this->email = isset($params['email']) ? $params['email'] : null; 
    } 
} 

もっとクリーンな方法がありますか?

答えて

5

extract()のように動作し、簡単なソリューション:

foreach($params as $key => $val) { 
    $this->$key = $val; 
} 
1

それを行うためのクリーンな方法は、完全に配列してextract()を避け、コンストラクタ個々の引数を渡すことです:

public function __construct($user_id, $password, $email) 
{ 
    // Add validation and default values for each member as needed 
    $this->user_id = $user_id; 
    $this->password = $password; 
    $this->email = $email; 
} 

この方法で、他のプログラマーは、コードを読み取ると、コンストラクターがどのような引数を期待しているか、その意味を一目で分かります。

また、クラスを使用するコードをより明確にします。比較:

$user = new User($id, $_POST['password'], $_POST['email']); 

で:

$user = new User($_POST); 

を最初のケースでは、あなたはそれが失敗したり、予期しない結果を生む理由を理解するには、クラスUserのコードを読む必要はありません。 の内容をすばやく調べれば、User::__construct()に渡された値が予想通りの値であるかどうかを知ることができます。


「他のプログラマは、」(と時間のほとんどがします)、数ヶ月後に、あなたの可能性があります。