Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Obtener valor del constructor

Estas en el tema de Obtener valor del constructor en el foro de PHP en Foros del Web. Hola. Tengo una duda y lo que sucede es lo siguiente. Creo mi clase y dentro de esa clase tengo un constructor que crea un ...
  #1 (permalink)  
Antiguo 16/08/2014, 10:44
 
Fecha de Ingreso: marzo-2014
Mensajes: 95
Antigüedad: 10 años, 1 mes
Puntos: 0
Información Obtener valor del constructor

Hola.

Tengo una duda y lo que sucede es lo siguiente.

Creo mi clase y dentro de esa clase tengo un constructor que crea un objeto de otra clase hasta ahí bien, después creo una función donde quiero utilizar el objeto que cree anteriormente en el constructor pero aparece vació, aquí el código.

Código PHP:
Ver original
  1. include "config/conexion.php";
  2. class usuario {
  3.     public $co;
  4.     public function __construct (){
  5.         $co = new conexion();
  6.     }
  7.     public function _validar(){
  8.         $queryc = "select * from recordatorios where id_recordatorio = 57;";
  9.         $res = $co->conexionf();       
  10.         $result = $res->query($queryc);
  11.         $rowc = mysqli_fetch_row($result);
  12.         if (!$result) {
  13.           echo 'Error al ejecutar la consulta';
  14.         }
  15.         echo "<script> alert('".$rowc[2]."'); </script>";
  16.     }
  17. }
  18. $ousuario = new usuario();
  19. $ousuario->_validar();
  #2 (permalink)  
Antiguo 16/08/2014, 11:31
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Obtener valor del constructor

Si estás usando el modo orientado a objetos, en lugar de mysqli_fetch_row($result), debería de ser $result->fetch_row(), aunque noto inconsistencia en el código que muestras.

Un ejemplo de conexión con una clase que luego será heredada por otra:

Archivo de conexión (conexion.php)
Código PHP:
Ver original
  1. class Conexion{
  2.     protected $mysqli;
  3.     protected $server = 'server';
  4.     protected $user = 'user';
  5.     protected $password = 'password';
  6.     protected $bd = 'bd';
  7.  
  8.     public function __construct (){
  9.         return $this->mysqli = new mysqli ($this->server, $this->user, $this->password, $this->bd) or exit ("No se pudo realizar la conexión");
  10.     }
  11.  
  12.     public function __destruct(){
  13.         return $this->mysqli->close();
  14.     }
  15. }

Archivo que contiene la clase que heredará a la clase anterior (consultas.php)
Código PHP:
Ver original
  1. include_once 'conexion.php';
  2.  
  3. class Consultas extends Conexion{
  4.     public function __construct(){
  5.         parent::__construct(); //Aquí heredo la conexión
  6.     }
  7.  
  8.     public function validar($query){
  9.         $sql = $this->mysqli->query($query);
  10.         if (!$sql) echo 'Se produjo un error';
  11.         else{
  12.             $result = $sql->fetch_row();
  13.             echo $result[2];
  14.             $sql->free();
  15.         }
  16.     }
  17. }

Y para invocar a este método, solo te quedaría hacerlo así:

Código PHP:
Ver original
  1. include_once 'consultas.php';
  2. $consultas = new Consultas();
  3. $consultas->validar('SELECT * FROM recordatorios WHERE id_recordatorio = 57');

Inténtalo así y dinos cómo te fue.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 16/08/2014, 11:40
 
Fecha de Ingreso: marzo-2014
Mensajes: 95
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Obtener valor del constructor

Pues de hecho como lo utilizo me funciona bien, la unica diferencia es que tengo que instanciar el objeto en la función y lo que necesito es hacerlo en el constructor. Pero la forma que lo muestras es excelente tendré que hacerlo como lo tienes GRACIAS.
  #4 (permalink)  
Antiguo 16/08/2014, 11:41
 
Fecha de Ingreso: agosto-2014
Mensajes: 4
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Obtener valor del constructor

http://www.forosdelweb.com/f18/requisito-admision-pagina-1106739/ Alexis,podrias corregirme eso?
  #5 (permalink)  
Antiguo 16/08/2014, 12:05
 
Fecha de Ingreso: marzo-2014
Mensajes: 95
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Obtener valor del constructor

Mira lo intente como lo tinenes pero me arroja un error y no se a que se deba.

Fatal error: Call to a member function query() on a non-object in line 12.

y en la linea 12 tengo esto: $sql = $this->link->query($query);

Si comparas esa linea con la que tu pusiste lo único que cambia es el nombre de la variable que de igual forma la cambie en la clase conexión así que no debe de haber ningún problema.

Gracias anticipadas.
  #6 (permalink)  
Antiguo 16/08/2014, 12:23
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Obtener valor del constructor

Muéstranos la implementación de ambas clases.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 16/08/2014, 12:23
 
Fecha de Ingreso: marzo-2014
Mensajes: 95
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Obtener valor del constructor

Realmente no lo que no me funciona es el constructor ya que he estado debugueando y le asigno un valor a una variable de la cual realizo un echo en la función pero no me muestra el valor de la variable.
  #8 (permalink)  
Antiguo 16/08/2014, 12:32
 
Fecha de Ingreso: marzo-2014
Mensajes: 95
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Obtener valor del constructor

Ok aqui van, esta es la clase conexion:

Código PHP:
Ver original
  1. class conexion {
  2.     private static $dbhost = 'mihost';
  3.     private static $dbusr = 'miusr';
  4.     private static $dbpwd = 'mipwd';
  5.     private static $dbname = 'midba';
  6.     protected $link;
  7.     public function __construct() {
  8.     //}
  9.     //public function conexionf (){
  10.         $this->link = new mysqli(self::$dbhost,self::$dbusr,self::$dbpwd,self::$dbname);
  11.         if($link->connect_error){
  12.             echo "Error de conexión: ".$link->connect_errno." $link->connect_error\n";
  13.             exit;
  14.         }else{
  15.             return $link;
  16.         }
  17.     }
  18. }

Si lo ves es un poco diferente pero así me funciona si creo el objeto dentro de una función.

Aquí esta la clase donde creo el objeto conexión.

Código PHP:
Ver original
  1. include_once "config/conexion.php";
  2. class usuario extends conexion{
  3.     public function __construct (){
  4.         parent::__construct();
  5.     }
  6.     public function _validar(){
  7.         $queryb = "select * from recordatorios where id_recordatorio = 57;";
  8.         $sql = $this->link->query($queryb);
  9.         if (!$sql) echo 'Se produjo un error';
  10.         else{
  11.             $result = $sql->fetch_row();
  12.             echo $result[2];
  13.         }
  14.     }
  15. }
  16. $ousuario = new usuario();
  17. $ousuario->_validar();
  #9 (permalink)  
Antiguo 16/08/2014, 12:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Obtener valor del constructor

Estás retornando $link en lugar de $this->link. Corrige eso.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #10 (permalink)  
Antiguo 16/08/2014, 12:39
 
Fecha de Ingreso: marzo-2014
Mensajes: 95
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Obtener valor del constructor

Excelente, eso era el error MUCHAS GRACIAS DE VERDAD

Etiquetas: constructor, mysql, select, valor
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 19:08.