0
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 进行设置,但无法完成。

4

3 回答 3

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 用魔术函数重播。

于 2012-10-29T07:34:18.190 回答
0

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

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.
于 2012-10-29T07:34:09.180 回答
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
于 2012-10-29T08:14:42.320 回答