在构造函数中定义数据成员

时间:2010-04-29 15:31:24

标签: php oop class data-members

我有一小段代码,我希望能够将每个数组元素定义为新的数据成员。

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
        }

    }

3 个答案:

答案 0 :(得分:0)

您想要实现的目标是可能的,但是您将无法创建新属性protected(因为这仅适用于预定义的成员)。

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

请注意在$中使用name之前的$this->$name:这会使PHP使用$name变量的当前值作为属性。

答案 1 :(得分:0)

  

//受保护的新数据成员

您将无法在运行时创建非公共属性。如果protected是最重要的,您可以声明受保护的数组或对象,并在构造函数中将键/值插入其中

答案 2 :(得分: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");
    }