Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO Listar en php oo

Estas en el tema de Listar en php oo en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola , esta es lo primero que estoy haciendo en poo por lo que seguro esta muy mal , pero bueno de los errores se ...
  #1 (permalink)  
Antiguo 16/05/2012, 21:39
 
Fecha de Ingreso: julio-2011
Mensajes: 38
Antigüedad: 12 años, 9 meses
Puntos: 1
Pregunta Listar en php oo

Hola , esta es lo primero que estoy haciendo en poo

por lo que seguro esta muy mal , pero bueno de los errores se aprende...

alguien me podría decir que hago mal y como hacerlo bien

quiero hacer una classe que sirva para listar los resultados, pasandole yo la consulta y la tabla a seleccionar (la ide final es que los liste en con una estructura de html) pero primero me conforme con que los liste jaja

esto es lo que hice
Código PHP:

<?php 



class LISTAR_NOTA{

$link mysql_connect("******""******""*******") or
die(
"Could not connect: " mysql_error());
    
    public 
$_query;
    private 
$_tabla;
    
    public function 
_construct($query$tabla)
    {
      
$this->_query $query;
      
$this->_tabla $tabla;
        
    }
    
    public function 
consulta(){
            
            
    
mysql_select_db($this->_tabla);    
    
$result mysql_query('"'.$this->_query.'"');   // esto me suena a que esta mal

            
    
public function _mostrar(){
          
          
$V='';
          while (
$row mysql_fetch_array($result)) {
              
             
              
              
$V= echo $row[0]."<br>";
              
$V.= echo $row[1]."<br>";
              
$V.= echo $row[2]."<br>";
              
$V.= echo $row[3]."<br>";
              
$V.= echo $row[4]."<br>";
              
$V.= echo $row[5]."<br>";
        
        
        }         
         
         return 
$V;  
        }
    
    
                }




?>
  #2 (permalink)  
Antiguo 17/05/2012, 03:50
 
Fecha de Ingreso: mayo-2012
Mensajes: 61
Antigüedad: 11 años, 11 meses
Puntos: 23
Respuesta: Listar en php oo

tienes varias lagunas.. deberias leer mas sobre POO en PHP antes de empezar, ya que veo errores graves de sintaxis (no cierras algunos metodos) y fallos con referencia al contexto de las variables.

Código PHP:
    public $_query
    private 
$_tabla
     
    public function 
_construct($query$tabla
    { 
      
$this->_query $query
      
$this->_tabla $tabla
         
    } 
hasta ahi, esta todo bien, salvo que si vas a pasarle la query por el constructor de nada sirve que sea publica, puedes hacerla privada.
Podrias pasarle en el constructor solo la tabla y create un getter y setter correspondiente para la propiedad $_query.

La conexion a la base de datos deberias tenerlo en otro metodo, asi como una desconexion.

Código PHP:
public function conectar(){
     
//te conectas a la bd
}

public function 
desconectar(){
     
//te desconectas de la bd

finalmente en tu método consulta llamarías primero al método de "conectar", después realizarías la consulta pasandole la query (que tienes como propiedad en la clase y que debiste settear antes de llamar a este método), guardas los resultados en otra propiedad de la clase (por ejemplo: private $rows) y cierras la conexión llamando al método de "desconectar".

Uno de los problemas que tienes es que la variable $result que creas en el método de consulta no esta en el mismo ámbito que el método mostrar.

finalmente, también veo que tienes fallos en lo que es el lenguaje en si..

esto: $V= echo $row[0]."<br>";
esta mal, no puedes igualar una variable a un echo.

Deberías estudiar antes bien la programación estructurada antes de comenzar con objetos.

Saludos!

PD: el constructor es asi: __construct() con dos guiones bajos...
  #3 (permalink)  
Antiguo 17/05/2012, 15:28
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Listar en php oo

Buenas lo primero que te recomendaré ya que deseas trabajar con objetos es que para conexiones uses PDO, puedes extender tu clase de esta y aprovechar las funcionalidades, clases para gestionar DB ya han sido discutidas en el foro, puedes hacer una busqueda, lo segundo es que debes pensar bien cada uno de los objetos y cual es su responsabilidad, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #4 (permalink)  
Antiguo 18/05/2012, 00:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 61
Antigüedad: 11 años, 11 meses
Puntos: 23
Respuesta: Listar en php oo

o quizas si no necesitas abstraerte de la bd, puedes usar mysqli.
pero igual puedes seguir tu ejemplo con la API de mysql normal. Lo que ganas con PDO o mysqli (aparte de abastracion, solo con PDO) es que todo sea orientado a objetos.

Aunque como dije mejor que leas antes mas sobre POO!

Saludos!
  #5 (permalink)  
Antiguo 18/05/2012, 14:54
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Listar en php oo

Es que incluso con PDO puede trabajar directamente, si ven la documentación, las ventajas que trae es que para cambiar driver de base de datos solo cambias el dns en el constructor de la clase, pero para mejor referencia vean el link que les deje, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 18/05/2012, 20:30
 
Fecha de Ingreso: julio-2011
Mensajes: 38
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Listar en php oo

Cita:
Iniciado por pfranco Ver Mensaje
tienes varias lagunas.. deberias leer mas sobre POO en PHP antes de empezar, ya que veo errores graves de sintaxis (no cierras algunos metodos) y fallos con referencia al contexto de las variables.

Código PHP:
    public $_query
    private 
$_tabla
     
    public function 
_construct($query$tabla
    { 
      
$this->_query $query
      
$this->_tabla $tabla
         
    } 
hasta ahi, esta todo bien, salvo que si vas a pasarle la query por el constructor de nada sirve que sea publica, puedes hacerla privada.
Podrias pasarle en el constructor solo la tabla y create un getter y setter correspondiente para la propiedad $_query.

La conexion a la base de datos deberias tenerlo en otro metodo, asi como una desconexion.

Código PHP:
public function conectar(){
     
//te conectas a la bd
}

public function 
desconectar(){
     
//te desconectas de la bd

finalmente en tu método consulta llamarías primero al método de "conectar", después realizarías la consulta pasandole la query (que tienes como propiedad en la clase y que debiste settear antes de llamar a este método), guardas los resultados en otra propiedad de la clase (por ejemplo: private $rows) y cierras la conexión llamando al método de "desconectar".

Uno de los problemas que tienes es que la variable $result que creas en el método de consulta no esta en el mismo ámbito que el método mostrar.

finalmente, también veo que tienes fallos en lo que es el lenguaje en si..

esto: $V= echo $row[0]."<br>";
esta mal, no puedes igualar una variable a un echo.

Deberías estudiar antes bien la programación estructurada antes de comenzar con objetos.

Saludos!

PD: el constructor es asi: __construct() con dos guiones bajos...
Gracias , si es verdad hay errores duros , jaja , pero bueno lo estaba haciendo a las 3 am despues de levantarme a las 8 am.

igual es lo primero que hago en poo , donde puedo encontrar mas info y ejemplos sobre esto???? porque leí de algunos lugares como phpya , pero me gustaría practicar con ejemplos mas funcionales a lo que se puede llegar a aplicar.


acá hice algunas modificaciones , a ver que tal ?
Código PHP:

class LISTAR_NOTA{

    
$dbh = new PDO('mysql:host=localhost;dbname=test'$user$pass);
    
    private 
$_query;
    private 
$_tabla;
    private 
$_result;
    
    public function 
__construct($query$tabla)
    {
      
$this->_query $query;
      
$this->_tabla $tabla;
        
    }
    
    public function 
consulta(){
            
            
    
mysql_select_db($this->_tabla);    
    
$result mysql_query('"'.$this->_query.'"'); 
    
$this->_result $result;
    }
    public function 
_mostrar(){
          
          
$V='';
          while (
$row mysql_fetch_array($this->_result)) {
              
             
              
              
$V$row[0]."<br>";
              
$V.=  $row[1]."<br>";
              
$V.=  $row[2]."<br>";
              
$V.=  $row[3]."<br>";
              
$V.=  $row[4]."<br>";
              
$V.=  $row[5]."<br>";
        
        
        }         
         
         return 
$V;
         
$dbh null;
        }
    
    
                } 
saludos !
  #7 (permalink)  
Antiguo 18/05/2012, 20:54
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Listar en php oo

Si lo miras bien desde un diseño listar notas no debería de ser un objeto sino mas bien un método, de un objeto notas, que pueda listarlas.

Tienes que revisar un poco los conceptos, al principio es lo mas tedioso de aprender OOP, aunque las clases pueden tener cualquier nombre, las acciones son métodos si te fijas listar_notas tienes nombre de acción, o no?? en OOP las acciones o comportamientos son métodos y las características son atributos, entonces pudieras crear algo como esto
Código PHP:
Ver original
  1. class Nota
  2. {
  3.     /**
  4.     *
  5.     * @var PDO $db
  6.     */
  7.     private $db;
  8.    
  9.     public function __construct() {
  10.          try {
  11.               $this->db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);              
  12.          } catch(PDOException $e) {
  13.               echo $e->getMessage();
  14.          }
  15.     }
  16.     public function listarNotas() {
  17.         //tu logica para listar las notas
  18.    }
  19. }

por cierto si estas trabajando con PDO no tienes que usar mysql_query() ya que son dos drivers distintos, revisa bien la documentación que te deje de PDO para que puedas sacar todo las ventajas de la misma.
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: lista, poo
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 04:21.