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

problema con clases

Estas en el tema de problema con clases en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola quiero leer los datos de mi base de datos usando una clase pero uso esta clase para conectarme a la base de datos: @import ...
  #1 (permalink)  
Antiguo 13/06/2010, 11:00
Avatar de dyegox  
Fecha de Ingreso: enero-2008
Mensajes: 173
Antigüedad: 16 años, 3 meses
Puntos: 7
problema con clases

hola quiero leer los datos de mi base de datos usando una clase pero uso esta clase para conectarme a la base de datos:
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  *
  4.  * @access private
  5.  * @type: class
  6.  * @description: clase para la conexion a la base de datos
  7.  */
  8.  
  9. class bd{
  10.     public $username='root'; //nombre de usuario de la base de datos
  11.     var $password=''; //contrase?a del usuario
  12.     var $servidor='localhost'; //nombre del servidor, normalmente localhost
  13.     var $DBname='default'; //nombre de la base de datos
  14.     var $conn; //necesario para la conexion y desconexion de la base de datos
  15.     var $debug; //modo depuracion, mostrara los errores y los querys
  16.  
  17.     function bd($debug=1){
  18.         //para que en php 4 haya un destructor como en php 4
  19.         register_shutdown_function(array(&$this, '__destruct'));
  20.  
  21.         //constructor
  22.         $argcv = func_get_args();
  23.         call_user_func_array(array(&$this, '__construct'), $argcv);
  24.     }
  25.  
  26.     function x(){
  27.     //para cerrar la conexion mysql
  28.     //debes utlizarla SIEMPRE al final de tu documento
  29.         if(isset($this->conn)) { mysql_close($this->conn); }
  30.     }
  31.    
  32.     function error_mysql($msg,$query=''){
  33.     //muestra el error
  34.         if($this->debug==1 && !empty($query)) $msg .= '<br><b />QUERY:</b><br />'.$query;
  35.         $this->enmarcar($msg);
  36.         $this->x();
  37.         die();
  38.     }
  39.  
  40.     function enmarcar($str){
  41.     //para mostrar los errores dentro de un rectangulo
  42.         echo '<span style="display:block;border:1px red solid;padding:5px;">',$str,'</span>';
  43.     }
  44.  
  45.     function f( $valor ){
  46.     /*
  47.     funcion para evitar ataques sql-injection, debes utilizarla cuando hagas querys
  48.     Ejemplo:
  49.     $query1 = new query("select * from usuarios where nombre='".$bd->f($_POST['nombre'])."' and password='".$bd->f($_POST['password'])."'",$bd);
  50.     */
  51.             if(get_magic_quotes_gpc())
  52.                 $valor = stripslashes($valor);
  53.         if( function_exists('mysql_real_escape_string') )
  54.             return mysql_real_escape_string( $valor );
  55.         else //per PHP inferior a 4.3.0
  56.             return addslashes( $valor );
  57.     }
  58.  
  59.     function __destruct(){
  60.         //el destructor se ejecuta antes de cerrar la ejecucion y con esto cerramos la conexion a la base de datos
  61.         $this->x();
  62.     }
  63.  
  64.  
  65.     function __construct($debug=1)
  66.     {
  67.         //al llamarla conecta directametne a la base de datos
  68.         $this->debug = $debug;
  69.         $this->conn = @mysql_connect($this->servidor, $this->username, $this->password) or $this->error_mysql(mysql_error());
  70.         mysql_select_db($this->DBname) or $this->error_mysql(mysql_error());
  71.     }
  72. }
  73.  
  74. class query{
  75.     var $bd;//conexion mysql, requerido para llamar funciones de la classe bd
  76.     var $q; //query introducida
  77.     var $n;//numero de resultados
  78.     var $v;//los resultados en una tabla de objetos
  79.     var $a;//numero de filas afectadas por la query
  80.  
  81.     function query($query,$bd){
  82.         //constructor
  83.         $argcv = func_get_args();
  84.         call_user_func_array(array(&$this, '__construct'), $argcv);
  85.     }
  86.  
  87.     function __construct($query,$bd)
  88.     {
  89.     //ejecuta la query y rellena las propiedades del objeto
  90.         $this->q = $query;
  91.         $this->bd = $bd;
  92.         $mysql_result = @mysql_query($query) or $this->bd->error_mysql(mysql_error(),$query);
  93.         $this->n = @mysql_num_rows($mysql_result);
  94.         $this->a = @mysql_affected_rows();
  95.         if($this->n)
  96.             for($i=0;$i<$this->n;$i++) $taula[$i] = @mysql_fetch_object($mysql_result);
  97.         else $taula = null;
  98.         $this->v = $taula;
  99.         if(  $this->n > 0  ) mysql_free_result($mysql_result);
  100.     }
  101.    
  102. }
  103.  
  104. ?>

tengo este clase qe intendo qe pueda usarse con la clase para conectarme a la bd
escuche algo de extenderla lo implemente asi:
Código PHP:
Ver original
  1. <?php
  2. class user extends bd implements query{
  3.     function user($key, $id) {
  4.         $query = $this->query("select $key from usuarios WHERE id=$id", $this->bd());
  5.         foreach ($query->v as $fila)
  6.         return $fila->$key;
  7.     }
  8. }
  9. ?>
  10.  
  11. pero no se como hacer qe funcione .. aviso estoy empezando a usar clases
  12.  
  13. gracias de antemano :borracho:
  #2 (permalink)  
Antiguo 13/06/2010, 11:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: problema con clases

Te recomiendo que uses la clase PDO. Lo otro estás usando métodos que corresponden a PHP 4, te recomiendo que leas algún manual actualizado porque esa forma de crear la clase con sus métodos y propiedades es obsoleta.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 14/06/2010, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Tema movido desde PHP a PHP orientado a objetos
  #4 (permalink)  
Antiguo 14/06/2010, 16:00
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: problema con clases

Hola

Ojo con esta linea "class user extends bd implements query" implements se utiliza con interfaces en php, en tu caso query no es una interfaz es una clase comun y corriente, hay varios temas en el foro que tratan acerca de interfaces y clases abstractas, para que funcione lo que tienes hecho tienes que hacer de query una interface y que sea la clase bd quien implemente el/los metodo(s) que defines en la interfaz luego por ende esa linea se veria modificada ya que solo habria herencia de user y bd.

Saludos
  #5 (permalink)  
Antiguo 15/06/2010, 20:07
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: problema con clases

Que tal Dyegox,

Conceptualmente hablando, no estás "usando", estás "heredando" y la relación user extends bd está equivocada, tu Usuario nunca será "un tipo de Base de Datos" (eso es lo que estás diciendo con tu código, que lo es).

"Usar" es que usuario cree una instancia de Db y luego haga lo que tiene que hacer, en un método concreto ("relación de dependencia").

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Etiquetas: clases
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:07.