1

重複の可能性:
PHP - 配列パラメーターを使用してオブジェクト メンバーを初期化する

クラスで連想配列のデータを独自のメンバー変数に適用する方法を探しています。ただし、これらの変数が存在しない場合、プロセスはエラーをスローしません。

注意: extract() 関数が何をするかを探していないか、その動作を誤解しています。

例:

class customer {

    public $firstName;
    public $lastName;
    public $email;

    public function apply($data){
        /* here i want to be able to iterate through $data and set the class
           variables according to the keys, but without causing problems 
           (and without creating the variable in the class) if it does not exist
           (yet)) */
    }

}

$c=new customer();
$c->apply(array(
    'firstName' => 'Max',
    'lastName'  => 'Earthman',
    'email'     => 'max@earthman.com'
));

説明が適切であることを願っています。

不明な点は質問してください。

4

2 に答える 2

2

このようなことができます

class customer {
    public $firstName;
    public $lastName;
    public $email;

    public function apply($data) {
        $var = get_class_vars(__CLASS__);
        foreach ( $data as $key => $value ) {
            if (array_key_exists($key, $var)) {
                $this->$key = $value;
            }
        }
    }
}

$c = new customer();
$c->apply(array('firstName' => 'Max','lastName' => 'Earthman','email' => 'max@earthman.com',"aaa" => "bbb"));
var_dump($c);

出力

object(customer)[1]
  public 'firstName' => string 'Max' (length=3)
  public 'lastName' => string 'Earthman' (length=8)
  public 'email' => string 'max@earthman.com' (length=16)
于 2012-10-07T16:29:09.327 に答える
0
//Works for private as of 5.3.0 
//Will also return statics though.

public function apply($data){
   foreach($data  as $key => $val) {
      if(property_exists('customer',$key)) {
         $this->$key = $val;
      }
   } 
}

これがデータベースからのものである場合、関連する配列をクラスに適用するのではなく、オブジェクトを直接返す関数があります。ちょっとした考え。

于 2012-10-07T16:39:07.847 に答える