Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Conexion a BD Orientada a Objetos

Estas en el tema de Conexion a BD Orientada a Objetos en el foro de PHP en Foros del Web. Tengo el siguiente código que representa una clase para conexión a mi base de datos. Código PHP: <? class  conexionbd  {               public  $servidor ...
  #1 (permalink)  
Antiguo 18/07/2013, 22:36
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Conexion a BD Orientada a Objetos

Tengo el siguiente código que representa una clase para conexión a mi base de datos.

Código PHP:
<?

class conexionbd {
    
    
    public 
$servidor;
    public 
$usuario;
    public 
$clave;
    public 
$bd;
    
    
    public function 
__construct($servidor,$usuario,$clave,$bd) {
        
        
$servidor=$this->servidor;
        
$usuario=$this->usuario;
        
$clave=$this->clave;
        
$bd=$this->bd;
    }
    
    
    public function 
clsdatos()
    {
    
$con = new mysqli($this->servidor,$this->usuario$this->clave$this->bd);
    
    if (
$mysqli->connect_errno)
  {
  echo 
"Error en Conexión: " $mysqli->connect_error;
  }
    }    
    
}
?>
Si por ejemplo quisiera utilizar los métodos del objeto (mysqli) pero en otras paginas donde hago el llamado a la conexión no bastaría con colocar por ejemplo (mysqli->query) pues solo estoy haciendo el llamado a la conexión mas esta no se esta definiendo en la página donde hago el llamado. No se si me logro explicar bien. Disculpen mi ignorancia pues soy novato programando.
  #2 (permalink)  
Antiguo 18/07/2013, 22:52
Avatar de vesper_metal90  
Fecha de Ingreso: enero-2013
Mensajes: 103
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Conexion a BD Orientada a Objetos

Para usar los metodos de mysli tienes que declarar funciones en tu clase conexion solo las llamas con tu objeto de la clase y ya otra cosa los atributos de una clase siempre se declaran private y creas funciones publicas que devuelvan esos vañores eso es por cuestiones de seguridad
  #3 (permalink)  
Antiguo 19/07/2013, 09:55
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Conexion a BD Orientada a Objetos

Ya se como. Se hace retornando el valor de la conexión y luego asignando una variable a ese método cuando es llamado. Disculpen esta pregunta idiota :/
  #4 (permalink)  
Antiguo 19/07/2013, 14:19
Avatar de vesper_metal90  
Fecha de Ingreso: enero-2013
Mensajes: 103
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Conexion a BD Orientada a Objetos

Mas o menos asi como dices
  #5 (permalink)  
Antiguo 20/07/2013, 01:06
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Conexion a BD Orientada a Objetos

Cita:
Si por ejemplo quisiera utilizar los métodos del objeto (mysqli) pero en otras paginas donde hago el llamado a la conexión no bastaría con colocar por ejemplo (mysqli->query) pues solo estoy haciendo el llamado a la conexión mas esta no se esta definiendo en la página donde hago el llamado. No se si me logro explicar bien. Disculpen mi ignorancia pues soy novato programando.
De echo para lo que quieres lo único que necesitas es algo que te devuelva una instancia de mysqli. Para resolver esto hay varias opciones pero en tu caso igual te puede servir implementar un singleton para que obtengas la misma instancia de mysqli cada vez que necesitas utilizarla.
Te dejo un ejemplo simple de como puede quedar:
Código PHP:
Ver original
  1. class DataBaseObject {
  2.   private static $instance = null;
  3.  
  4.   public static function getInstance() {
  5.      if($this->instance === null) {
  6.         $this->instance = new mysqli($servidor,$usuario,$clave,$db);
  7.      }
  8.  
  9.      return $this->instance;
  10.   }
  11.  
  12.   private function __construct() {}
  13.   private function __clone() {}
  14.  
  15. }
  16.  
  17.  //para usar
  18.   $db = DataBaseOBject::getInstance();
  19.   $db->query();
  20.   //....

Toma nota que no declare las variables que usa el objeto mysqli. Esa parte ya queda a tu elecccion
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 20/07/2013, 06:50
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Conexion a BD Orientada a Objetos

Why Singletons are Evil - http://blogs.msdn.com/b/scottdensmor...25/140827.aspx
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 20/07/2013, 11:27
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Conexion a BD Orientada a Objetos

Cita:
Iniciado por hhs Ver Mensaje
De echo para lo que quieres lo único que necesitas es algo que te devuelva una instancia de mysqli. Para resolver esto hay varias opciones pero en tu caso igual te puede servir implementar un singleton para que obtengas la misma instancia de mysqli cada vez que necesitas utilizarla.
Te dejo un ejemplo simple de como puede quedar:
Código PHP:
Ver original
  1. class DataBaseObject {
  2.   private static $instance = null;
  3.  
  4.   public static function getInstance() {
  5.      if($this->instance === null) {
  6.         $this->instance = new mysqli($servidor,$usuario,$clave,$db);
  7.      }
  8.  
  9.      return $this->instance;
  10.   }
  11.  
  12.   private function __construct() {}
  13.   private function __clone() {}
  14.  
  15. }
  16.  
  17.  //para usar
  18.   $db = DataBaseOBject::getInstance();
  19.   $db->query();
  20.   //....

Toma nota que no declare las variables que usa el objeto mysqli. Esa parte ya queda a tu elecccion

Muchas gracias amigo, pero por que declaraste __construct y __clone?
  #8 (permalink)  
Antiguo 20/07/2013, 19:16
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Conexion a BD Orientada a Objetos

Es para que no hagan instancias directas de esa clase. y ya de paso vi que tengo un error de implementan al usar las variables estáticas te dejo el fragmento de código corregido.
Código PHP:
Ver original
  1. class DataBaseObject {
  2.   private static $instance = null;
  3.  
  4.   public static function getInstance() {
  5.      if(self::$instance === null) {
  6.         self::$instance = new mysqli($servidor,$usuario,$clave,$db);
  7.      }
  8.  
  9.      return self::$instance;
  10.   }
  11.  
  12.   private function __construct() {}
  13.   private function __clone() {}
  14.  
  15. }
  16.  
  17.  //para usar
  18.   $db = DataBaseOBject::getInstance();
  19.   $db->query();
  20.   //....
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 21/07/2013, 06:38
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Conexion a BD Orientada a Objetos

Creo que se pierde el punto de que en realidad Singleton es algo que ni siquiera se debería tener en cuenta, les sugiero que lean el enlace que deje anteriormente, y bueno, que sentido tiene la supuesta protección cuando PHP tiene algo como Reflection ?, terminas dependiendo de la buena voluntad del developer, llegado este punto preferible utilizar un DiC.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: bd, conexion, mysql, objetos, orientada
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 05:08.