Я хочу создать свойства, настроенные на данные mysql.

class MyClass{
    private $a = $r['a'];
    private $b = $r['a'];
    private $c = $r['c']; 
}



Я знаю, что это неправильный синтаксис, но хочу, чтобы вы поняли идею.

Я мог бы создать метод, который возвращает запрошенные данные mysql, но я не хочу, чтобы функция вызывалась для каждой отдельной строки.

0
Zebra 11 Янв 2011 в 14:31

2 ответа

Лучший ответ

Зачем изобретать велосипед?

Проверьте этот mysqli_result :: fetch_object

1
ajreal 11 Янв 2011 в 15:21

Вам необходимо реализовать магический метод __get.

Что-то типа:

class MyClass {
  protected $_row = array();

  public function __get( $name )
  {
    if (array_key_exists($name, $this->_row)) {
      return $this->_row[$name];
    }
    return null;
  }

  public function __isset( $name )
  {
    return array_key_exists($name, $this->_row);
  }
}

И вы можете использовать как:

$obj = new MyClass();
$obj->load(); // Or any method to load internal data
echo $obj->a . $obj->b;
2
joksnet 11 Янв 2011 в 14:39
У ajreal есть хорошая идея, почему вы создаете класс с массивом для хранения значений свойств и магических геттеров / настроек, когда mysqli_result :: fetch_object (или mysql_fetch_object) может делать то же самое без лишней работы?
 – 
Jonathan Amend
11 Янв 2011 в 17:00