MySQL + класс + недокументированные (?) конструкции PHP

eclipse

Новичок
MySQL + класс + недокументированные (?) конструкции PHP

Регулярно пишу классы, достающие много полей из БД. В один момент надоело писать конструкции типа

PHP:
$this->$field1 = $data->field1;
$this->$field2 = $data->field2;
//...
$this->$field20 = $data->field20;
и я решил написать в конструкторе класса так:

1.
PHP:
$sql = "SELECT i.item_id, i.full_descr, ... FROM item i, ... WHERE ...";
$res = mysql_query($sql);
$data = mysql_fetch_object($res);
foreach($data as $key => $value)
   $this->$key = $value;

И это работает. Однако вопрос:
PHP:
$this->$key
- это документированная конструкция языка? Могу ли я так написать и быть спокоен, что оно будет работать в следующих версиях PHP?


2.
Поля, полученные таким образом, не были объявлены в явном виде как public, private или какие-либо еще. Попробовал создать экземпляр объекта и напечатать какое-нибудь поле:
PHP:
$i = new Item(12);
echo $i->full_descr;
Поле видно извне, то есть оно public. Мне так и надо. Но опять же,
Вопрос: Написано ли где-нибудь в документации, что вот этакие «динамически создаваемые» поля объекта по умолчанию становятся именно public? Могу ли я так написать и быть спокоен, что оно будет работать в следующих версиях PHP?

P.S. PHP 5.2.
 

Adelf

Administrator
Команда форума
1. Все нормально.
2. Лучше так не писать.

А вообще
Вместо
PHP:
$this->$field1 = $data->field1;
$this->$field2 = $data->field2;
//...
$this->$field20 = $data->field20;
лучше
PHP:
$this->values = array();
...
foreach($data as $key => $value)
   $this->values[$key] = $value;
И уж если хочешь сильно работать как с полями - используй магические методы __get и __set ( http://ru2.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members ).
 
Сверху