Php 将数组设置为公共属性

Php 将数组设置为公共属性,php,class,Php,Class,是否有任何方法可以将$db_fields数组设置为公共变量/属性,而无需手动键入它,如: class Student{ $db_fields = array('id','firstname','lastname') } ? 我正试图使用foreach设置它,但我无法完成。是的,您可以在您的类中使用magic方法和(这些方法用于访问实例的不可访问变量。您可以在文档中获得更多信息) class Student{ $db_fields = array('id','firstname',

是否有任何方法可以将$db_fields数组设置为公共变量/属性,而无需手动键入它,如:

class Student{

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

}
?


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

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

class Student{

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

    public $id;
    public $firsname;
    public $last;
}
现在您可以使用它:

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

public function __set($name, $value){
    $this->{$name} = $value;
}
你可以这样设置。。 或者这样

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'));
其思想是当您调用该类以使用某些函数设置这些变量时。。 第一种方法是使用构造函数,第二种方法是只为此编写一个函数


第三种方法是使用神奇功能重放@PLB。

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

你想说的是:

$db_fields = array('id' => 5,'firstname' => 'Paul', 'lastname' => 'Doe');
echo $db_fields->id; // would print 5.
唯一的例子是,如果您所说的数组是带有register globals的$\u POST和$\u GET,但据我所知,任何数组都不可能这样做(事实上,即使使用$\u POST和$\u GET数组,通常也不建议这样做)

编辑:

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

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

我的意思是我不想设置公共$id;公费$firsname;公帑最后一笔;;我只想将数组字段设置为公共变量。@arjay0601只是想澄清一下:您想执行类似以下操作:
$instanceOfStudent->id
,它返回了数组中键
id
的关联值:
$db\u fields=array('id'=>1,…)
?@PLB已经以正确的方式编写了。。我通常反对这样的方法添加类中不存在的变量。。第一,你的代码很难被其他开发人员理解;第二,如果出于某种原因,你的代码跳过了其中的一个变量,那么依赖它的任何类函数都会失败,因为它根本不存在。@PLB这不是我想要的。例如,我在类中只有$db_fields=array('id','firstname','lastname')。db_字段有没有办法变成公共变量?该id将在类中成为公共$id,而不必真正键入它。@arjay0601在数组中(id、firstname、lastname)是数组值,如果设置它们(id=>1、firstname=>2、lastname=>3),则它们是值为1、2、3的键。您必须使用一种严格的方法将它们添加到类中。。所以至少要把它们写成键。。
$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
$db_fields = array('id' => 5,'firstname' => 'Paul', 'lastname' => 'Doe');
extract($db_fields);
echo $id; // if I'm not mistaken, that should work