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 =  "";
  }

这会将所有列名作为属性添加到您的类中,默认情况下为公共。然后您可以使用 $this->md5、$this->credit 等访问它们...

You should probably look at PDO and returning rows and object and applying a cast to it... PDO has fetch methods where you specify a classname and does this sort of thing automagically. I highly recommend NOT creating your own database abstraction library or ORM as there are already very good ones.

于 2012-05-18T15:48:56.627 回答