Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    When throw an exception .........

    Ciao.
    Ho trovato un'interessante discussione su un
    forum inglese in cui si parla della opportunità
    o meno di lanciare una exception.
    In poche parole secondo voi le exceptions
    vanno usate solamente per errori ie (non posso
    aprire un file ) o anche nel caso ie (input guest
    errore username già esistente).
    Insomma mi pare una questione da approfondire
    visto che nel forum che io sappia non se ne è
    ancora parlato (o no )
    Fatemi sapere.

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  2. #2
    Perchè non posti il link della discussione?
    What is the |\/|atrix?

  3. #3

    .......

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  4. #4
    I like to think of an exception as an emergency in the execution of the program

    commento che condivido a pieno, le eccezzioni sono tali, eccezzioni, non la prassi.

    Il problema delle eccezioni è che potresti fare un sito così:

    try {generaTuttoIlSitoConnettiDbAltro()}
    catch($e) {echo "spiacente qualcosa è andato storto";}



    tutte le funzioni che ritornano un booleano senza generare warnings devono essere usate per fare verifiche ... poi se una condizione è particolarmente strana puoi scegliere se generare un eccezione al fine di ritrovarti nell' except ( per paradosso una specie di goto ... ).

    Come gestire poi le eccezioni è una tua scelta, solitamente permettono di fare debug molto avanzato con gestione dettagliata delle problematiche, da inviare in output o tenere sul server per migliorare l'applicativo o capire come ricreare il problema.

    Per ora sono comunque poco usate nel mondo php, sia perchè raramente si implementano error_handlers (e trigger_error), sia perchè la semplicità di PHP5 per i try catch non è ancora diffusa, venendo ancora spesso a mancare hosting compatibile.
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5

    ........

    Ciao.
    Quindi non faresti una cosa del genere
    Codice PHP:
    if(!fopen("/home/rasmus/file.txt""r")
    {
        throw new 
    Exception("qualcosa è andato storto");

    in questo modo eviterei lo E_WARNING se usato
    con try e catch.
    Si può pensarlo come un exit (sebbene con +
    possibilità di debug) o cambia qc ?
    Fammi sapere.


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6

    Re: ........

    Originariamente inviato da whisher
    Ciao.
    Quindi non faresti una cosa del genere
    Codice PHP:
    if(!fopen("/home/rasmus/file.txt""r")
    {
        throw new 
    Exception("qualcosa è andato storto");

    in questo modo eviterei lo E_WARNING se usato
    con try e catch.
    ecco appunto ... questa è comodità, non programmazione, rischia di farti introdurre buchi pazzeschi al tuo applicativo ... faccio tutto tanto poi va in exception ... per cosa, per un file ?


    codice:
    if(file_exists($filename) && is_readable($file) && $fp = fopen($file, "r")) {
    	// fai ...
            fclose($fp);
    }
    else {
    	// ... se proprio devi o gestisci gli errori in exceptions ...
            throw new Exception("Il file non esiste o è corrotto");
    }
    in pratica non deve essere una comodità, deve essere una reale necessità, almeno questo è il mio punto di vista.


    cmq per questo solo caso ...


    if(@$fp = fopen("file", "r"))
    ...

    ma usare @ è un pò come usare le exception per comodità
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    in genere con le eccezioni è comodo gestire quel tipo di errori che non permettono l'esecuzione dell'applicativo, tipo che manca il database, una libreria, una direttiva fondamentale del php, generalizzando la cosa, e sono tutti errori che possono essere gestiti in maniera simile (messaggio d'errore, eventuale log, etc. etc.).

    Gli errori di input dell'utente nel compilare un form certamente non rientrano in questa casistica. Non sono "problemi" per il programma, sono normali situazioni che vanno gestite con la solita logica di programmazione.

  8. #8
    Ah, non necessariamente l'eccezione deve essere "bloccante" per il sistema.
    Io ad esempio le uso per gestire in maniera trasparente i deadlock nelle transazioni annidate, sfruttando appunto il fatto che il throw si propaghi "in verticale" lungo le varie chiamate, per essere intercettato dall'apposito catch.
    Fare la stessa cosa senza eccezioni è decisamente più complesso.

  9. #9
    Originariamente inviato da skidx
    Ah, non necessariamente l'eccezione deve essere "bloccante" per il sistema.
    Io ad esempio le uso per gestire in maniera trasparente i deadlock nelle transazioni annidate, sfruttando appunto il fatto che il throw si propaghi "in verticale" lungo le varie chiamate, per essere intercettato dall'apposito catch.
    Fare la stessa cosa senza eccezioni è decisamente più complesso.
    un goto ... appunto
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10

    ...........

    Abbi pazienza ma allora saresti contrario
    anche a questo uso (insomma in tutti gli
    esempi nel web + o - è riportato lo stesso uso).
    Codice PHP:
    <?php
    class FileReader{
      private 
    $file;
      private 
    $fileDir='fileDir/';
      const 
    FILE_DATA_ERROR=1;
      const 
    EMAIL_DATA_ERROR=2;
      public function 
    __construct($file){
        if(!
    file_exists("{$this->fileDir}{$file}.php")){
          throw new 
    Exception('File '.$file.' not found',self::FILE_DATA_ERROR);
        }
        
    $this->file=$file;
      }
      public function 
    getContent(){
        if(!
    $content=file_get_contents("{$this->fileDir}{$this->file}.php")){
          throw new 
    Exception('Unable to read filecontents',self::FILE_DATA_ERROR);
        }
        return 
    $content;
      }
      public function 
    mailContent(){
        if(!@
    mail('Recipient<user@domain.com>','HTML Page',$this->getContent())){
          throw new 
    Exception('Unable to send by email file contents',self::EMAIL_DATA_ERROR);
        }
      }
    }
    try{
      
    $fr=new FileReader('sample_file'); // potential error condition
      // email file content
      
    $fr->mailContent(); // potential error condition 
      // echo file content
      
    echo $fr->getContent(); // potential error condition
    }
    catch(
    Exception $e){
      
    // if error occurred when reading file data, stop program execution
      
    if($e->getCode()==1){
        die(
    $e->getMessage());
      }
      
    // if error occurred when emailing file data, send error message to system logger
      
    else if($e->getCode()==2){
        echo 
    $e->getMessage().'
    '
    ;
        
    error_log($e->getMessage(),0);
      }
    }



    ?>
    Fammi sapere.

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.