将Array设置为公共属性

时间:2012-10-29 07:31:08

标签: php class

class Student{

$db_fields = array('id','firstname','lastname')

}

有没有办法将$ db_fields数组设置为公共变量/属性而无需手动输入:

class Student{

    $db_fields = array('id','firstname','lastname')

    public $id;
    public $firsname;
    public $last;
}

我正在尝试使用foreach设置它,但我无法完成它。

3 个答案:

答案 0 :(得分:1)

class Student{

    public $db_fields;

    public $id;
    public $firsname;
    public $last;

    public function __construct($data){
        $this->db_fields = $data;
    }
}

$students = new Student(array('id','firstname','lastname'));

你可以这样设置.. 或者这样......

  class Student{

        public $db_fields;

        public $id;
        public $firsname;
        public $last;

        public function set_db_fields($data){
            $this->db_fields = $data;
        }
    }

    $students = new Student();
    $students->set_db_fields(array('id','firstname','lastname'));

这个想法是当你调用该类来设置那些具有某些功能的变量时。 第一种方式是使用构造函数,第二种方法是仅为此编写1函数..

第三种方式是@PLB用魔术函数重播。

答案 1 :(得分:0)

是的,您可以在班级Student中使用魔术方法__get__set(这些方法用于访问实例的不可访问变量。您可以在文档中获取更多信息)。

public function __get($name) {
    return $this->{$name};
}

public function __set($name, $value){
    $this->{$name} = $value;
}

现在你可以使用它了:

$obj = new Student();
$obj->db_fields = array(1,2,3); //Assign private variable.
var_dump($obj->db_fields); //Get private variable.

答案 2 :(得分:0)

访问数组变量的唯一方法是通过数组(据我所知):

$db_fields = array('id' => 5,'firstname' => 'Paul', 'lastname' => 'Doe');
echo $db_fields->id; // would print 5.

你想说的是:

$db_fields = array('id' => 5,'firstname' => 'Paul', 'lastname' => 'Doe');
echo $id; // would print 5 but that is not possible

这个工作的唯一实例是你正在谈论的数组是$ _POST和带有寄存器全局的$ _GET,但据我所知,不可能用任何数组做这个(事实上它通常不是建议即使使用$ _POST和$ _GET数组也要这样做。

修改

您实际上可以在数组中使用extract()函数。

$db_fields = array('id' => 5,'firstname' => 'Paul', 'lastname' => 'Doe');
extract($db_fields);
echo $id; // if I'm not mistaken, that should work