PHP的面向对象编程是有办法来自动设置这个变量(php oop is there way to au

2019-07-29 10:38发布

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;

Answer 1:

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

您需要使用

$this->$column_name = $column_value

或者你可以写在$ db_fields领域的所有列,并添加

public function __get($name) {}

(了解魔术方法 )



Answer 2:

我想我不明白你的问题,但我想你想使用的参考操作 :

class MyClass {
    protected $name;

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


Answer 3:

嗯...我想你问到没有如何明确地声明属性。 在这种情况下做到这一点:

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

这将所有的列名作为属性公共添加到您的类,默认情况下。 然后你可以使用这个 - $> MD5,$这个 - >信贷等访问它们...

你或许应该看看PDO和返回行和对象,并应用投吧... PDO具有抓取,你指定一个类名和做这样的事情自动的方法。 我强烈建议,因为已经非常好的没有创造自己的数据库抽象库或ORM。



文章来源: php oop is there way to automatically set this variables
标签: php oop