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

validacion de instanciacion, se puede hacer esto?

Estas en el tema de validacion de instanciacion, se puede hacer esto? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola muchachos, tengo una duda.... hice una clase para conectarme a la bd, hacer consultas, etc @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original class database { ...
  #1 (permalink)  
Antiguo 23/02/2012, 10:35
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
validacion de instanciacion, se puede hacer esto?

Hola muchachos, tengo una duda....
hice una clase para conectarme a la bd, hacer consultas, etc
Código PHP:
Ver original
  1. class database {
  2.         var $id_conexion;
  3.         function database(){
  4.             $this->id_conexion = "";
  5.             return ($this->conectardatabase("localhost","3306","root","1234"));
  6.         }
  7.         function conectardatabase($server, $pto, $user, $clave){
  8.                 $this->id_conexion = @mysql_connect($server.":".$pto, $user, $clave);
  9.                 return ($this->id_conexion);
  10.         }
  11.                 function abrirdatabase($database){
  12.                  return(mysql_select_db($database, $this->id_conexion));
  13.         }
  14.          } //fin clase
hasta ahi todo bien, funciona!
en el metodo conectar deberia retornarme true o false, eso lo recibe el metodo constructor y lo retorna (true / false)
ahora miren como instancio
Código PHP:
Ver original
  1. include("clase.php");
  2. if ($obj=new database()){
  3.   echo "sin problemas!"
  4. }else{
  5.   echo "no existe conexion";
  6. }
pero por alguna razon siempre me muestra el mensaje "sin problemas", si cambio la clave o el usuario sigue saliendo el mensaje "sin problemas" pero deberia salir que no existe conexion...
hago un print_r($obj) y me muestra las propiedades correctamente...

Esta validacion en el momento de instanciar estaria bien hecha?? o como deberia hacerla? gracias
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #2 (permalink)  
Antiguo 23/02/2012, 10: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
Respuesta: validacion de instanciacion, se puede hacer esto?

Para eso son las excepciones, el constructor no regresa nada, simplemente regresa una instancia de la clase, por lo que el return que pongas ahí es nulo, no sirve de mucho, tienes que hacer algo así:
Código PHP:
Ver original
  1. class db
  2. {
  3.       public function __construct()
  4.      {
  5.                 if(!$this->conectarDb()) {
  6.                        throw new Exception('Imposible conectar');
  7.                 }
  8.       }
  9. }
  10.  
  11. try {
  12.       $db = new database();
  13. } catch (Exception $e) {
  14.       echo $e->getMessage();
  15. }

Saludos.
  #3 (permalink)  
Antiguo 23/02/2012, 11:40
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: validacion de instanciacion, se puede hacer esto?

Muchas Gracias gatorV, a estudiar excepciones
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #4 (permalink)  
Antiguo 23/02/2012, 11:44
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
Respuesta: validacion de instanciacion, se puede hacer esto?

Ojo que las excepciones son precisamente para eso, para casos excepcionales, o cuando la clase no pueda trabajar de la forma que necesita debido a que no hay los datos, no las uses como control de flujo de tu programa, ya que no son para eso, sí lo que quieres es por ejemplo checar que haya una conexión, dale un método a tu clase que lo haga:
Código PHP:
Ver original
  1. class db
  2. {
  3.           private $conexion;
  4.           public function __construct(/* config *)
  5.           {
  6.                    $this->config = $config;
  7.           }
  8.  
  9.           public function connect()
  10.           {
  11.                    $connect = foo();
  12.                    $this->conexion = $connect;
  13.                    return ($connect->id ? true : false);
  14.           }
  15.  
  16.            public function query($sql)
  17.            {
  18.                     if (!$this->conexion) {
  19.                              throw new Exception('no hay conexión');
  20.                     }
  21.  
  22.  
  23.                      // stuff
  24.            }
  25. }
  26.  
  27. try {
  28.       $db = new db(/* */);
  29.       if (!$db->connect()) {
  30.                 echo "no se pudo conectar";
  31.       } else {
  32.                $result = $db->query($sql);
  33.       }
  34. } catch (Exception $e) {
  35.       echo $e->getMessage();
  36. }

Saludos.
  #5 (permalink)  
Antiguo 23/02/2012, 13:49
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: validacion de instanciacion, se puede hacer esto?

GatorV, algo asi tenia, una propiedad llamada id_conexion, en esta quedaba almacenada el resultado de mysql_connect, luego hacia

Código PHP:
Ver original
  1. $db=new database;
  2. if ($db->id_conexion){
  3.   echo "OK";
  4. }

solo que queria hacerlo en una sola linea
Código PHP:
Ver original
  1. if ($db=new database){
  2. //bla bla
  3. }
pense que podia establecer una condicion implicita y evaluarla segun el valor retornado desde la instancia(true / false)
Ahora, me confundo, osea que no se "deberia" usar exepciones para instanciar...
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #6 (permalink)  
Antiguo 23/02/2012, 13:52
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
Respuesta: validacion de instanciacion, se puede hacer esto?

No entiendo a que te refieres con "excepciones para instanciar", sí puedes lanzar excepciones en tu constructor, solo te digo que no controles el flujo con las excepciones, ya que son para precisamente, casos excepcionales.

Saludos.
  #7 (permalink)  
Antiguo 23/02/2012, 14:06
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: validacion de instanciacion, se puede hacer esto?

Ok muchas gracias, igual seguire leyendo
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x

Etiquetas: clases, instanciar, validar
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 16:58.