php oop有自动设置这个变量的方法

时间:2012-05-18 15:40:46

标签: php oop

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;

3 个答案:

答案 0 :(得分:1)

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

您需要使用

$this->$column_name = $column_value

或者您可以在$ db_fields字段中写入所有列并添加

public function __get($name) {}

(阅读magic methods

答案 1 :(得分:0)

我想我不明白你的问题,但我认为你想使用references operator

class MyClass {
    protected $name;

    public myfunction() {
        $foo = $this->name;
        $this->name = &$foo;
        // now $foo is a reference to $this->name
    }
}

答案 2 :(得分:0)

嗯......我想你在问如何不必明确声明属性。那样做:

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

这会将所有列名称作为属性添加到您的类中,默认情况下为public。然后你可以使用$ this-&gt; md5,$ this-&gt; credit等来访问它们。

您应该查看PDO并返回行和对象并对其应用强制转换... PDO具有获取方法,您可以在其中指定类名并自动执行此类操作。我强烈建议不要创建自己的数据库抽象库或ORM,因为已经有非常好的。