Foros del Web » Programando para Internet » PHP »

Duda sobre mi clase Usuario

Estas en el tema de Duda sobre mi clase Usuario en el foro de PHP en Foros del Web. Buenas, Estoy creando mi clase usuario y me surge una duda, a ver si me podéis ayudar En el siguiente código muestro dos clases, las ...
  #1 (permalink)  
Antiguo 01/10/2010, 13:30
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Duda sobre mi clase Usuario

Buenas,

Estoy creando mi clase usuario y me surge una duda, a ver si me podéis ayudar

En el siguiente código muestro dos clases, las dos hacen uso de la base de datos. Y no sé cuál es la mejor forma de realizar esta conexión.

Crear dos métodos específicos uno para cada clase que se conecte a la BD?
Usar las clases constructora tal y como tengo en el ejemplo de abajo?
Debería instanciar la clase BD dentro de cada clase?
Se os ocurre una forma mejor?


Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Clase Usuario (login, register, logout, etc)
  4.  */
  5.  
  6. // Carga los ficheros de base de datos
  7. require_once('BD/DB_config_reader.class.php');
  8. require_once('BD/MyPDO.class.php');
  9. require_once('BD/Registry.class.php');
  10.  
  11.  
  12. class Usuario{
  13.  
  14.     private $_nombre;
  15.     private $_usuario;
  16.     private $_password;
  17.     private $_correo;
  18.     private $_pais;
  19.     private $_birthday;
  20.     private $_sexo;
  21.     private $_userReferido;
  22.     private $_con;
  23.        
  24.     public function __construct($DbConexion){
  25.             $this->_con=$DbConexion;
  26.     }
  27.    
  28.     // Registrar nuevo usuario
  29.     public function newUsuario($nombre,$usuario,$password,$correo,$pais,$birthday,$sexo,$userReferido){
  30.        
  31.         // Cargo las variables
  32.         $this->_nombre=$nombre;
  33.         $this->_usuario=$usuario;
  34.         $this->_password=$password;
  35.         $this->_correo=$correo;
  36.         $this->_pais=$pais;
  37.         $this->_birthday=$birthday;
  38.         $this->_sexo=$sexo;
  39.         $this->_userReferido=$userReferido;
  40.        
  41.         $query = "SELECT * FROM tbl_user"; /* consulta de prueba */
  42.         $comando = $this->_con->prepare($query);
  43.         $comando->execute();
  44.        
  45.         while( $datos = $comando->fetch() ) {
  46.             echo $datos[1].'<br />';
  47.         }
  48.     }
  49.    
  50.     // Genera un password aleatorio
  51.     public function randomPass($length=10, $chrs = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'){
  52.         for($i = 0; $i < $length; $i++) {
  53.             $pwd .= $chrs{mt_rand(0, strlen($chrs)-1)};
  54.         }
  55.         return $pwd;
  56.     }
  57. }
  58.  
  59. /************************************************************************/
  60. /**
  61.  * Clase Partidos (listar partidos, etc...)
  62.  */
  63. class Partidos{
  64.     private $_con;
  65.    
  66.     public function __construct($DbConexion){
  67.         $this->_con=$DbConexion;
  68.     }
  69.    
  70.     // Listar todos las partidos de la base de datos
  71.     public function listarPartidos(){
  72.         $query = "SELECT home FROM partidos";
  73.         $comando = $this->_con->prepare($query);
  74.         $comando->execute();
  75.  
  76.         while( $datos = $comando->fetch() ) {
  77.         echo $datos[0].'<br />';
  78.         }
  79.     }
  80. }
  81. /************************************************************************/
  82.  
  83.  
  84. /* ************ EJEMPLO EN USO ******************/
  85. $db_master = dbFactory::create('BD/bd_master.ini');
  86.  
  87. $cat= new Partidos($db_master);
  88. $cat->listarPartidos();
  89.    
  90. $userTest = new Usuario($db_master);
  91.  
  92. //Valores de ejemplo
  93. $nombre='Dani';
  94. $usuario='neodani';
  95. $password='12345';
  96. $pais='españa';
  97. $birthday='21-12-1985';
  98. $sexo='H';
  99. $userReferido='';
  100.  
  101. $userTest->newUsuario($nombre,$usuario,$password,$correo,$pais,$birthday,$sexo,$userReferido);
  102. echo $userTest->randomPass(15);
  103.  
  104. ?>

La clase de conexión a la base de datos que utilizo es la que creamos en el siguiente post
http://www.forosdelweb.com/f68/duda-...ml#post3546182

¿Qué forma es la que me recomendáis para hacer uso de la clase BD en mis otras clases que necesiten conectarse a una BD?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 01/10/2010, 17:09
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Duda sobre mi clase Usuario

Pues en mi caso yo uso el patrón singleton y sólo uso un require_once(DB.php) en cada clase que la voy a usar, como tú, también lo instancio en el constructor, pero por ejemplo al momento de llamar a la clase de llamar a tu clase Usuario, sólo haría un $userTest = new Usuario(); ya que internamente en la clase ya estoy haciendo uso de la conexión.
__________________
Quitenme la vida pero no la bebida.
  #3 (permalink)  
Antiguo 02/10/2010, 07:37
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Duda sobre mi clase Usuario

Cita:
Iniciado por cesarpunk Ver Mensaje
Pues en mi caso yo uso el patrón singleton y sólo uso un require_once(DB.php) en cada clase que la voy a usar, como tú, también lo instancio en el constructor, pero por ejemplo al momento de llamar a la clase de llamar a tu clase Usuario, sólo haría un $userTest = new Usuario(); ya que internamente en la clase ya estoy haciendo uso de la conexión.
Pero yo debo pasarle el parámetro a la clase Usuario() porque así le digo que conexión debe utilizar (por ej. distinto entre BD master y BD esclava.

$db_master = dbFactory::create('BD/bd_master.ini');
$userTest = new Usuario($db_master);

¿Alguna opinión más? me gustaría recibir más, no os cortéis opinad por favor! :D

Etiquetas: clase, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:33.