Сделайте версию 1 и кэшируйте результаты вашего запроса базы данных в поля вашего объекта. Вы не хотите обращаться к базе данных каждый раз в течение срока службы объекта, а в веб-приложении время жизни объекта - это всего лишь один запрос страницы, поэтому существует небольшая вероятность загрязнения неатомарных операций с данными.
Далее, не подключайтесь к базе данных в вашем конструкторе. Потратьте время на создание фабрики классов для генерации ваших классов. Честно говоря, вы даже можете написать очень простой генератор кода, чтобы сгенерировать как класс модели, в котором хранятся все ваши поля данных, так и класс mapper, который идет в базу данных и строит ваш объект из таблицы, содержащей менее 100 строк кода.
Если у вас есть дополнительное время, изучите и используйте фреймворк, такой как Zend, или просто для данных, учите ...
(FWIW, я думаю, что изучение простых вещей в Zend Table даст вам экономию времени)
class User{
protected $_id;
protected $_email;
protected $_username;
protected $_userFirstName;
public function __construct(){
}
public function setId($id){
$this->_id = $id;
return $this;
}
public function setEmail($email)
{
$this->_email = $email;
}
// etc and getters too
}
public class UserMapper
{
protected $_connection;
public function __construct($connection){
$this->_connection = $connection;
}
public loadUser($id){
$select = $this->_connection->select(' * from Users')
->where('id = ?', $id);
$result = $select->fetchAll();
//error checking here
$user = new User();
$user->setId($results[0]['id'])
->setEmail($results[0]['email'])
->setUsername($results[0]['username']);
return $user;
}
public saveUser(User $user){
}
}