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番目の方法はコンストラクターを使用することであり、2番目の方法はそのためだけに1つの関数を記述することです..

3 番目の方法は、魔法の関数で @PLB を再生する方法です。

于 2012-10-29T07:34:18.190 に答える
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 に答える
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 に答える