Google
Web dns.bdat.net

[PHP-ES] Re: Problema con Classe

Write haof XML files: Gustavo Narea ( gustavo@php.net)
Fecha: mié 02 nov 2005 - 03:39:49 CET


Hola, Marcelo.

Marcelo Sosa wrote:
> Hola a todos..
> Mi problema tiene que ver con una clase, pero ya estoy dudando si es de
> la clase misma.
>
> Les paso el codigo:
> Aqui instancio la clase e invoco sus metodos:
> -------------------------------------------
> 01: $res = new DBs();
> 02: $res->conectar();
> 03: $r = $res->consultar($SQL);
> 04: $res->close();
> 05: if(!$r){
> 06: echo "Hubo un problema...";
> 07: die;
> 08: }
> 09: echo "\$r=".$r;die;
> 10: exit();
> -------------------------------------------
> En la linea 03, el metodo consultar me devuelve TRUE o FALSE, en la 05
> pregunto y despues imprimo su valor.
>
> Hasta aqui todo bien, ahora, si comento la linea 09 (donde imprimo el
> valor de $r), la condicion if(!$r){ se convierte en TRUE....o sea ahora
> imprime "Hubo un problema..."

Si en la línea 05 la condición es falsa, es falsa. $r puede cambiar su
valor cuantas veces quiera durante la ejecución de las demás
instrucciones, pero si en la quinta línea fue (!$r === true), no hay
nada que puedas hacer luego (en este caso, hasta donde yo veo).

Por lo tanto, el hecho de que comentes la línea nueve, no afecta que la
condición de la línea cinco se evalúe de manera distinta.

Por cierto, qué te parece esto:

<?php
$exito = false; // Esta variable nos será útil al final, ya verás :)

if( $res = new DBs() ){
     if( $res->conectar() ){
         if($r = $res->consultar($SQL))
             $exito = true;

         $res->close();
     }
}

if($exito){
     echo "\$r=$r";
}else{
     echo "Hubo un problema...";
}
exit();
?>

Si tienes dudas sobre el script, no dudes en preguntar ;-).

Y si quieres resumir el código anterior...

<?php
if( $res = new DBs() )
     if( $res->conectar() ){
         $r = $res->consultar($SQL);
         $res->close();
     }

// Usando el operador ternario...
echo ($r !== false) ? "\$r=$r" : "Hubo un problema...";

exit();
?>

Y si quieres saber cuál es el problema en tu script...
<?php
if( $res = new DBs() ){
     if( $res->conectar() ){
         if($r = $res->consultar($SQL)){
             $res->close();
         }else{
             $error = "Error con la consulta SQL";
         }
     }else{
         $error = "Error al conectar a la BBDD";
     }
}else{
     $error = "Error al crear la instancia";
}

// Usando el operador ternario otra vez...
echo ( !isset($error) ) ? "\$r=$r" : $error;

exit();
?>

Recuerda: no dudes en preguntar ante cualquier duda.

Saludos!

PD: No he probado los scripts que te mando, por lo que seguramente deben
tener error en sintaxis.

-- 
Best regards,
Gustavo Narea.
PHP Documentation - Spanish Translation Team.
Valencia, Venezuela.
-- 
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Este archivo fue generado por hypermail 2.1.7 : sáb 18 mar 2006 - 18:23:40 CET