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;
$this->{$column_name}; // THIS IS PROBLEMATIC!
Вы должны использовать
$this->$column_name = $column_value
ИЛИ вы можете написать все столбцы в поле $ db_fields и добавить
public function __get($name) {}
(читайте о магических методах )
Я думаю, что я не понимаю ваш вопрос, но я думаю, вы хотите использовать оператор ссылок :
class MyClass { protected $name; public myfunction() { $foo = $this->name; $this->name = &$foo; // now $foo is a reference to $this->name } }
Гм … Я думаю, вы спрашиваете, как не нужно явно объявлять свойства. В этом случае выполните следующее:
for($i=0; $i<$num_fields; $i++) { $column_name = mysql_field_name($result_set, $i); $this->$column_name = ""; }
Это добавит все имена столбцов в качестве свойств вашего класса по умолчанию как общедоступные. Затем вы можете получить к ним доступ, используя $ this-> md5, $ this-> credit и т. Д. …
Вероятно, вам стоит взглянуть на PDO и вернуть строки и объект и применить к ним приведение … PDO имеет методы выборки, в которых вы указываете имя класса, и делаете это автоматически. Я настоятельно рекомендую НЕ создавать собственную библиотеку абстракции базы данных или ORM, поскольку есть уже очень хорошие.