Por ejemplo:
Tu clase
Usuario debería tener solamente sus atributos y accesores para esos atributos:
Código PHP:
class Usuario{
var $id;
var $nick;
var $email;
var $puntos;
/**
* Constructor.
* Recibe un array ($registro) como el que se obtiene en mysql_fetch_array()
*/
function Usuario($registro){
$this->id = $registro['id'];
$this->nick = $registro['nick'];
$this->email = $registro['email'];
$this->puntos = $registro['puntos'];
}
// Accesores
// getters
function getID(){
return $this->id;
}
function getNick(){
return $this->nick;
}
//etc, etc con los demás atributos
// setters
function setID($nuevoID){
$this->id = $nuevoID;
}
function setNick($nuevoNick){
$this->nick = $nuevoNick;
}
// etc, etc... con los demás atributos.
}
Y podrías hacer una clase
BaseDeDatos que sea la que se comunica con la BD:
Código PHP:
class BaseDeDatos{
// id de conexión
var $_con;
// Constructor. Establece la conexión.
function BaseDeDatos($servidor,$usuario,$password,$nombre_bd){
$this->_con = mysql_connect($servidor,$usuario,$password);
mysql_select_db($nombre_bd,$this->_con);
}
// query(): realiza la consulta
function query($sql){
return @mysql_query($sql,$this->_con);
}
// fetch_array(): Devuelve un registro en un array asociativo
function fetch_array($res){
if ($fila = mysql_fetch_array($res)){
return $fila;
}else{
return false;
}
}
}
Y entonces ya no tendrías que mencionar a "mysql" por ningún otro lado.
Podrías utilizar estas dos clases así:
Código PHP:
include('class.baseDeDatos.php');
include('class.usuario.php');
$bd = &new BaseDeDatos("localhost","usuario","xxxxx","mi_base");
$result = $bd->query("SELECT id,nick,email,puntos FROM usuarios where id='$id'");
$fila = $bd->fetch_array($result);
$user = &new Usuario($fila);
echo '<pre>';
print_r($user);
echo'</pre>';
Como ves, la clase Usuario representa sólo un usuario y la clase BaseDeDatos las conexiones y funciones que permiten interactuar con una BD... El resto del manejo se hace fuera de ellas.
Ahora, podrías tener otra clase que se encargue de manejar los usuarios. En este caso sólo obtienes un usuario por su id. Pero sería mejor tener una clase que pueda manejar también otras consultas y crear instancias de usuarios, por ejemplo para agregar un nuevo usuario a la BD, o editar alguno existente, o eliminar... etc.
También podrías tener otra clase que se encargue de imprimir lo que quieras. Pero no dentro del usuario. (O en último caso, por un tema de pruebas podrías poner dentro del usuario una función "mostrar()" o "imprimir()" que imprima el contenido del objeto, pero de ninguna manera en el constructor).
No he pretendido para nada darte una solución "correcta" ni mucho menos... porque las clases son ultra básicas y sólo pretenden explicar... además, como dije, yo estoy en plena búsqueda de estos temas... así que cualquier opinión/correción será bienvenida.
Saludos