3

コードを見てください。配列には、テーブルのテーブル フィールド名が含まれています。

class User {
    public $db_fields = array('id', 'username', 'password', 'first_name', 'last_name');

    public $id;
    public $username;
    public $password;
    public $first_name;
    public $last_name;

}

アイデアは、関数でパブリック変数を削除して、アクセスできる配列からパブリック変数を自動的に作成することです ---

を削除したい

public $id;
public $username;
public $password;
public $first_name;
public $last_name;

$db_fieldsセクションで、これが配列によって自動的に生成されるようにします。

オブジェクトにアクセスできるように

$user = new User();
$user->username = "Ismail";

私がしたことは

extract($db_fields);

しかし、エラーが発生します:

解析エラー: 構文エラー、予期しない T_VARIABLE、C:\xampp\htdocs\advphp\dbclass\extractex.php の 3 行目に T_FUNCTION が必要です

4

3 に答える 3

1

extract($db_fields);残念ながら、コンストラクターや関数などのメソッド内から実行する必要があるメソッドを使用しようとすると、アイデアは機能しません。extract($db_fields);変数は抽出されますが、パブリックにはなりません。たとえば、これを試してみると、その関数に対してローカルになります。

function __construct(){
    extract($db_fields);
    // the $id will be available in the constructor only
    // it will get disposed when this method finished executing
}

別のアプローチは、プロパティまたはセッターとゲッターのアプローチを使用することです

<?php
class User {
    private $db_fields = array(
                        'id', 
                        'username', 
                        'password' => 'ismailPassword', 
                        'first_name',
                        'last_name'
      );

    function getValue($key){
       if (array_key_exists($key, $this->db_fields)){
            return $this->db_fields[$key];
       }
       return NULL;
    }

    function setValue($key, $value){
        $this->db_fields[$key] = $value;        
    }
}

$user = new User();
$user->setValue('username', 'Ismail');
echo " Username: ";
echo $user->getValue('username');
echo "\n\n Password: ";
echo $user->getValue('password');
?>

ここでコードをテストできますhttp://codepad.org/8MwBwdut

于 2012-12-15T09:14:49.350 に答える
1

次のように、すべてをまとめて削除$db_fieldsし、SQL クエリによって返される列に依存することができます。

class User
{
    private $_data;
    public function __construct($id = null) {
        //TODO: Load data into $this->_data for user of $id
    }

    public function __get($name) {
        if (array_key_exists($name, $this->_data))
            return $this->_data[$name];

        return NULL;
    }

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

    public function UpdateUser(){
        //TODO: update the database with any changes to the user data or do an insert for new user
    }
}

そして、最初に次のように宣言する必要なく、プロパティを動的に取得/設定できます。

$newUser = new User();
$newUser->username = "Ismail";
$newUser->UpdateUser();
于 2012-12-15T08:15:33.587 に答える
0

データベースの結果がキーと値のペアを返す場合、これを行うことができます:

$array = array();
while (($r = $result->fetch_array()) != false){
   $obj = new \stdClass();
   foreach($r as $key => $value){
       $obj->$key = $value;
   }
   $array[] = $obj;
}
于 2012-12-15T07:51:18.423 に答える