Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/03/2014, 17:10
matiD
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 7 meses
Puntos: 0
Duda sobre como llamar correctamente a un metodo de una clase desde otra

Como están?

Estoy comenzando con la POO, y me ha surgido una duda, me puse a leer en internet, y encuentro muchas respuestas y varias se contradicen entre sí. Otras explican que no se debe hacer de tal manera porque, por más que funcione correctamente no es lo adecuado en base a las buenas técnicas de programación.

Bien seguramente mi duda es bien simple para los que saben o tienen un poco de práctica en el tema.

Tengo un sitio web en el cual estoy creando un sistema login y registro, el mismo tiene las contraseñas encriptadas con un Salt aleatorio que creo para cada usuario al momento del registro.

Bien en el archivo clases/Usuario.php tengo la siguiente clase

Código PHP:
Ver original
  1. <?php
  2. class Usuarios
  3. {
  4.     public $idusuario = null;
  5.     public $usuario = null;
  6.     public $pass = null;
  7.     public $nombre = null;
  8.     public $apellido = null;
  9.     public $mail = null;
  10.     public $tipousuario = null;
  11.     public $idlocal = null;
  12.     public $esadmin = null;
  13.     public $puntos = null;
  14.     public $salt = null;
  15.    
  16.     public function __construct($datos = array())
  17.     {
  18.         if (isset($datos['usuario']))
  19.         {
  20.             $this->usuario = stripslashes(strip_tags($datos['usuario']));
  21.         }
  22.         if (isset($datos['pass']))
  23.         {
  24.             $this->pass = stripslashes(strip_tags($datos['pass']));
  25.         }
  26.     }
  27.    
  28.    
  29.     public function loginUsuario()
  30.     {...63 lines }
  31.  
  32.     //Funcion de registro de usuarios
  33.     public function registraUsuario()
  34.     {
  35.         $success = false;
  36.         try
  37.         {
  38.             //Tomamos los valores del post
  39.             $this->usuario = $_POST['usuario'];
  40.             $this->pass = $_POST['pass'];
  41.             $this->nombre = $_POST['nombre'];
  42.             $this->apellido = $_POST['apellido'];
  43.             $this->mail = $_POST['mail'];
  44.             $this->tipousuario = $_POST['tipousuario'];
  45.             $this->idlocal = $_POST['idlocal'];
  46.             $this->esadmin = $_POST['esadmin'];
  47.  
  48.             //Nos conectamos a la base de datos
  49.             $con = new mysqli(DB_HOST, DB_USUARIO, DB_PASSWORD, DB_DATABASE);
  50.             //Preparamos el query SQL
  51.             $sql = 'INSERT INTO usuarios VALUES (usuario, contrasena, salt, nombre, apellido, mail, tipo_usuario, id_local)'
  52.                     . 'VALUES (?,?,?,?,?,?,?,?)';
  53.             //Creamos la sentencia preparada a utilizar
  54.             $pre = $con->prepare($sql);
  55.             $pre->bind_param('ssssssii', $this->usuario, $this->pass, $this->salt, $this->nombre, $this->apellido,  $this->mail, $this->tipousuario, $this->idlocal);
  56.             $pre->execute();
  57.            
  58.             $con->close();
  59.            
  60.             $success = true;
  61.            
  62.             return $success;
  63.            
  64.         } catch (Exception $ex) {
  65.             return $ex->getMessage();
  66.         }
  67.    
  68.     }

Y tengo otra clase que genera contraseñas que se encuentra en el archivo 'clases/generaSalt.php'

Código PHP:
Ver original
  1. <?php
  2.  
  3. class generaSalt
  4. {
  5.     public $longitud;
  6.     public $cadena;
  7.     public $salt;
  8.    
  9.         public function crearSalt(){
  10.     //Se define una cadena de caractares. Te recomiendo que uses esta.
  11.     $this->cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
  12.     //Obtenemos la longitud de la cadena de caracteres
  13.     $longitudCadena=strlen($this->cadena);
  14.  
  15.     //Se define la variable que va a contener la contraseña
  16.     $this->salt = "";
  17.     //Se define la longitud de la contraseña, en mi caso 10, pero puedes poner la longitud que quieras
  18.     $this->longitud=50;
  19.  
  20.     //Creamos la contraseña
  21.     for($i=1 ; $i<=$this->longitud ; $i++){
  22.         //Definimos numero aleatorio entre 0 y la longitud de la cadena de caracteres-1
  23.         $pos=rand(0,$longitudCadena-1);
  24.  
  25.         //Vamos formando la contraseña en cada iteraccion del bucle, añadiendo a la cadena $pass la letra correspondiente a la posicion $pos en la cadena de caracteres definida.
  26.         $this->salt .= substr($this->cadena,$pos,1);
  27.     }
  28.     return $this->salt;
  29. }
  30. }

Bien ahora viene mi duda.
Quiero utilizar correctamente el método 'crearSalt' de la clase generarSalt, en el método registraUsuario de la clase Usuarios

Como podría introducirlo correctamente dentro del try de registraUsuarios?

Muchas gracias!