0
class User extends DatabaseObject {

    protected static $table_name='users';
    protected static $db_fields = array();

public  function __construct() {

    // Get columns from table
    global $database;
    $result_set = $database->query("SELECT * FROM ".self::$table_name." LIMIT 1");
    $num_fields = mysql_num_fields($result_set);
    for($i=0; $i<$num_fields; $i++) {
        $column_name = mysql_field_name($result_set, $i);
        // Set column names as variables
        self::$db_fields[] = $column_name; // THIS WORKS
    $this->{$column_name}; // THIS IS PROBLEMATIC!

  }

}

たとえば、これで、たとえば;$name = pulic $wherever; を呼び出すことができます。wherever->wherever

変数を追加するたびにこの名前を入力する必要がないように

public $md5;
public $credit;
public $pontaria_time;
public $Credits;
public $airoplayne;
public $city_id;
public $prisao_time;
public $crime2;
public $banck_time;
4

3 に答える 3

1
 $this->{$column_name}; // THIS IS PROBLEMATIC!

使用する必要があります

$this->$column_name = $column_value

または、すべての列を $db_fields フィールドに書き込んで追加することもできます

public function __get($name) {}

(魔法の方法について読む)

于 2012-05-18T15:46:27.490 に答える
0

私はあなたの質問を理解していないと思いますが、参照演算子を使用したいと思います:

class MyClass {
    protected $name;

    public myfunction() {
        $foo = $this->name;
        $this->name = &$foo;
        // now $foo is a reference to $this->name
    }
}
于 2012-05-18T15:46:12.570 に答える
0

うーん...プロパティを明示的に宣言する必要がない方法を尋ねていると思います。その場合は次のようにします。

for($i=0; $i<$num_fields; $i++) {
    $column_name = mysql_field_name($result_set, $i);   
    $this->$column_name =  "";
  }

これにより、すべての列名がプロパティとしてクラスに追加されます。デフォルトでは public です。次に、$this->md5、$this->credit などを使用してアクセスできます...

おそらくPDOを見て、行とオブジェクトを返し、それにキャストを適用する必要があります... PDOには、クラス名を指定するフェッチメソッドがあり、この種のことを自動的に行います。独自のデータベース抽象化ライブラリまたは ORM を作成しないことを強くお勧めします。非常に優れたライブラリが既に存在するからです。

于 2012-05-18T15:48:56.627 に答える