Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Duda sobre como llamar correctamente a un metodo de una clase desde otra

Estas en el tema de Duda sobre como llamar correctamente a un metodo de una clase desde otra en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 02/03/2014, 17:10
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 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!
  #2 (permalink)  
Antiguo 02/03/2014, 17:18
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Duda sobre como llamar correctamente a un metodo de una clase desde otra

No importa que estés dentro de una clase, puedes usar la clase salt igualmente
Código PHP:
$var = new generaSalt();
$var->crearSalt(); 
Es un ejemplo, otra forma seria crear la función crearSalt como estática, lo cual haría que la puedas usar sin instanciar un objeto.

Código PHP:
$var generaSalt::crearSalt() 
Aunque en este caso no podrías usar los atributos de la clase.

Un saludo
  #3 (permalink)  
Antiguo 02/03/2014, 17:22
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Duda sobre como llamar correctamente a un metodo de una clase desde otra

Cita:
Iniciado por Heli0s Ver Mensaje

Código PHP:
$var generaSalt::crearSalt() 
Aunque en este caso no podrías usar los atributos de la clase.
Es decir que si lo único que voy a utilizar es el resultado del Salt esta sería la forma más adecuada? no necesito los atributos solo el resultado de la función.

obviamente tengo que incluir el archivo que contiene la clase generarSalt, dentro del de Usuarios.

Una aclaración al margen, No agrego la funcion directamente en la clase usuarios, por motivo de que en otra opción del sitio cuando siga avanzando en su programación voy a necesitar una clave aleatoria de 5 digitos, entonces lo que voy a hacer es modificar la función y agregarle el parametro longitud para que cuando la utilice en registraUsuarios tenga 50 de longitud y cuando la vaya a utilizar en la otra parte del sitio le pondré 5.

Muchas gracias por la respuesta!!!
  #4 (permalink)  
Antiguo 02/03/2014, 17:30
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Duda sobre como llamar correctamente a un metodo de una clase desde otra

Cita:
Iniciado por matiD Ver Mensaje
Es decir que si lo único que voy a utilizar es el resultado del Salt esta sería la forma más adecuada? no necesito los atributos solo el resultado de la función.
Exacto

obviamente tengo que incluir el archivo que contiene la clase generarSalt, dentro del de Usuarios.

Una aclaración al margen, No agrego la funcion directamente en la clase usuarios, por motivo de que en otra opción del sitio cuando siga avanzando en su programación voy a necesitar una clave aleatoria de 5 digitos, entonces lo que voy a hacer es modificar la función y agregarle el parametro longitud para que cuando la utilice en registraUsuarios tenga 50 de longitud y cuando la vaya a utilizar en la otra parte del sitio le pondré 5.
Mira las funciones require_once e include_once, te pueden interesar

Muchas gracias por la respuesta!!!
Un saludo
  #5 (permalink)  
Antiguo 02/03/2014, 17:38
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Duda sobre como llamar correctamente a un metodo de una clase desde otra

Heli0s Muchas gracias por todo, si lo tengo como include_once. Y ya está funcionando perfectamente!!!

Realmente tengo mucho lio sobre cuando usar include, include_once, requiere_once... no logro entender bien la diferencia pero bueno por ahora todo va funcionando.

Te hago una consulta, a ver si inicio un nuevo tema por esto o no.

La forma de tomar los valores de POST y asignarselo a los atributos de la clase Usuarios es correcta o hay alguna forma recomendada de hacerlo?
  #6 (permalink)  
Antiguo 02/03/2014, 17:45
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Duda sobre como llamar correctamente a un metodo de una clase desde otra

Correcto es, lo que le falta es muchisima seguridad, pero te recomiendo que para eso abras otro tema para que esté todo mejor organizado.

Un saludo

Etiquetas: clase, correctamente, metodo, mysql, registro, sql, usuarios, variable
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 07:01.