[Php-objetos] Consulta sobre try catch

Juan Marcos malditared en hotmail.com
Lun Feb 16 20:55:40 ART 2009


Hola Andrés, estuve toqueteando un poco el tema y me parece que el try va en el lugar donde llamás a la función, y ésta función internamente lanza la excepción que es capturada fuera. O sea, el try va fuera del objeto (por lo menos en el caso que vos planteás) para poder capturar el error en caso de que haya uno y poder hacer algo con eso en lugar de que el error salga siempre, por ejemplo, en el codigo que mostraste:


>     function 
> __construct($combustible=null,$plasas=null,$cantRuedas=null,$consumoPorKm=null){
>         parent::__construct($combustible);
>         $this->plasas=$plasas;
>         $this->cantRuedas=$cantRuedas;
>         $this->consumoPorKm=$consumoPorKm;
>        
>         try {
>             if ($combustible==null or $plasas==null or $cantRuedas==null 
> or $consumoPorKm==null)
>             throw new Exception("Faltan valores en los atributos de Auto.");
>         }
>         catch (Exception $e){
>             print "Error: ".$e->getMessage()."\n";
>             exit;
>         }   
>     } // Fin de __construct

 
yo eliminaria el try y el catch y lo colocaría fuera, de forma que el construct quedaria algo asi:

function __construct($combustible=null,$plasas=null,$cantRuedas=null,$consumoPorKm=null){

          parent::__construct($combustible);

          $this->plasas=$plasas;

          $this->cantRuedas=$cantRuedas;

          $this->consumoPorKm=$consumoPorKm;

              if ($combustible==null or $plasas==null or $cantRuedas==null or $consumoPorKm==null)

                throw new Exception("Faltan valores en los atributos de Auto.");


} // Fin de __construct

y en el momento que lo llamás hacés:

$combus=new combustible('FULL',11.11);


try {
  $auto=new Auto($combus,2,1,66);
}
catch (Exception $e){
              print "Error: ".$e->getMessage()."\n";
              exit;
}   

De ésta forma si fallara, podrias tanto mostrar el error y parar el programa, o, por ejemplo, solicitarle al usuario que ingrese nuevamente el combustible indicandole el motivo. De esta forma hace mucho más dinámico manejar los mensajes de error a nuestra conveniencia.

Espero que sirva de algo, suerte!


- Juan Marcos.

Nota: creo que es plazas y no plasas (fijate el enunciado) :P
---

> Date: Mon, 16 Feb 2009 20:14:03 -0200
> From: andresmdiaz7 en gmail.com
> To: php-objetos en pato2.fi.mdp.edu.ar
> Subject: [Php-objetos] Consulta sobre try catch
> 
> Hola gente, aun con el ejercicio uno, pero mas dominado por suerte.
> Estoy tratando de hacer una validacion en el constructor de mi clase 
> auto, no sé como se implementa bien el try catch, pero le damos batalla
> Esta bien lo que estoy haciendo, creo que si por eso lo hice asi, jajaja.
> 
> Código del constructor:
> El atributo $combustible es de tipo objeto, le paso la instancia del 
> objeto combustible al constructor de auto.
> Lo que intento hacer es que al momento de crear el objeto auto, sino 
> ingresa los valores, tire una excepcion.
> En el caso de que este bien, implementaria lo mismo para validar el tipo 
> de datos en los setters.
> 
> 
>     function 
> __construct($combustible=null,$plasas=null,$cantRuedas=null,$consumoPorKm=null){
>         parent::__construct($combustible);
>         $this->plasas=$plasas;
>         $this->cantRuedas=$cantRuedas;
>         $this->consumoPorKm=$consumoPorKm;
>        
>         try {
>             if ($combustible==null or $plasas==null or $cantRuedas==null 
> or $consumoPorKm==null)
>             throw new Exception("Faltan valores en los atributos de Auto.");
>         }
>         catch (Exception $e){
>             print "Error: ".$e->getMessage()."\n";
>             exit;
>         }   
>     } // Fin de __construct
> 
> 
> 
> 
> La instancia queda de esta manera
> $combus=new combustible('FULL',11.11);
> $auto=new Auto($combus,2,1,66);
> 
> y para pickup
> 
> $combus->setTipo('GASOIL');
> $combus->setValor(9.33);
> $pickup=new Pickup($combus,4,200,98756);
> 
> y funciona perfectamente.
> _______________________________________________
> Php-objetos mailing list
> Php-objetos en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-objetos

_________________________________________________________________
Descargá GRATIS el poder del nuevo Internet Explorer 7.
http://optimized.msn.com/Default.aspx?mkt=es-ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/private/php-objetos/attachments/20090216/d3b4a685/attachment-0001.htm 


Más información sobre la lista de distribución Php-objetos