コンストラクター内のデータメンバーを定義します
-
02-10-2019 - |
質問
コードのこの小さなスニペットを手に入れました。各配列要素を新しいデータメンバーとして定義できるようにしたいと思います。
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
}
}
解決
//保護された新しいデータメンバー
実行時に非公開のプロパティを作成することはできません。保護されている場合、保護されたアレイまたはオブジェクトを宣言し、コンストラクターにキー/値を挿入できます
他のヒント
- オブジェクトのメンバーにアクセスするときは、常にこれを使用します($ this-> data_members in constructorである必要があります)。
魔法の方法を定義することを試すことができます__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"); }
達成したいことは可能ですが、新しいプロパティを作成することはできません protected
(これは事前定義されたメンバーにとってのみ可能であるため)。
function __construct($id = 0, $data = NULL)
{
foreach($this->$data_memebers as $name => $value ){
$this->$name = $value;
}
}
の使用に注意してください $
前 name
の $this->$name
: :これにより、PHPは現在の値を使用させます $name
プロパティとして変数。
所属していません StackOverflow