2

この小さなコード スニペットを取得しました。各配列要素を新しいデータ メンバーとして定義できるようにしたいと考えています。

class Core_User
{
     protected $data_members = array(
         'id'               =>  '%d',
         'email'            => '"%s"',
         'password'         => '"%s"',
         'title'            => '"%s"',
         'first_name'       => '"%s"',
         'last_name'        => '"%s"',
         'time_added'       =>  '%d' ,
         'time_modified'    =>  '%d' ,
         );

    function __construct($id = 0, $data = NULL)
    {
        foreach($this->data_members as $member){
           //protected new data member
        }

    }
4

3 に答える 3

0
  1. オブジェクトのメンバーにアクセスする場合は、常に$ thisを使用してください(コンストラクターでは$ this-> data_membersである必要があります)。
  2. マジックメソッド__get&__ setを定義してみることができます(ただし、それらを保護できるかどうかはわかりません)。:

    protected function __get($name){                  
     if (array_key_exists($name,$this->data_memebers))
     {
         return $this->data_memebers[$name];
     }         
     throw new Exception("key $name doesn't not exist");  
    }  
    protected function __set($name,$value){
     if (array_key_exists($name,$this->data_memebers))
     {
         $this->data_memebers[$name] = $value;
     }
     throw new Exception("key $name doesn't not exist");
    } 
    
于 2010-04-29T15:46:09.293 に答える
0

達成したいことは可能ですが、新しいプロパティを作成することはできませんprotected(これは事前定義されたメンバーに対してのみ可能であるため)。

function __construct($id = 0, $data = NULL)
{
    foreach($this->$data_memebers as $name => $value ){
       $this->$name = $value;
    }
}

$before nameinの使用に注意してください$this->$name: これにより、PHP は$name変数の現在の値をプロパティとして使用します。

于 2010-04-29T15:35:18.460 に答える
0

//保護された新しいデータ メンバー

実行時に非パブリック プロパティを作成することはできません。保護が最優先の場合は、保護された配列またはオブジェクトを宣言し、コンストラクターでキー/値を挿入できます

于 2010-04-29T15:42:23.310 に答える