Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [oop phpContinuare esecuzione codice dopo Exception

    Salve giovani ogni tanto ritorno..

    vorrei capire se è possibile continuare l'esecuzione del codice dopo aver mostrato una Exception..

    ho solamente fatto una prova se mi andava di culo cosi:
    Codice PHP:
    <?php
    class customException extends Exception {

        public 
    $output;

        public function 
    __construct$message$code ) {
            
    parent::__construct$message$code );
            if ( 
    $this->getCode() == ) {
                
    $this->__errorMessage();
            } elseif ( 
    $this->getCode() == ) {
                
    $this->__statusMessage();
            }
        }

        
    // custom string representation of object
        
    public function __toString() {
            return 
    __CLASS__ ": [{$this->code}]: {$this->message}\n";
        }

        public function 
    __errorMessage() {
            
    $msg 'Error: ' $this->getMessage() . '
    '
    ;
            
    $traceErrors $this->getTrace();
            
    $msg .= 'on: ' $traceErrors[0]['file'] . '
    '
    ;
            
    $msg .= 'line: ' $traceErrors[0]['line'] . '
    '
    ;
            
    $this->output $msg;
        }

        public function 
    __statusMessage() {
            
    $statusMessage = new message$this->getMessage() );
            
    $statusMessage->__buildMessage'statusMessage' );
            
    $this->output $statusMessage->__returnHtml();
            continue;
        }

        public function 
    __showMessage() {
            return 
    $this->output;
        }
    }
    ?>
    ovviamente il "continue" sul metodo statusMessage() non serve a niente.. però c'ho provato.. voi conoscete un metodo piu carino per continuare l'esecuzione sfruttando l'Exception class??
    Questa volta, più che un voto.. è favoreggiamento.

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    forse è il __returnHtml() che blocca l'esecuzione del codice, dove viene definito quel metodo?

  3. #3
    Ciao non credo sia quello.. "__returnHtml()" è un metodo comune a tutte le classi che come puoi capire hanno un output di codice HTML sotto trovi la classe "message" ma non credo ti possa essere di molto aiuto..

    Codice PHP:
    <?php
    class message implements returnHtml {

        private 
    $content;

        public function 
    __construct$content ) {
            
    $this->content $content;
        }

        public function 
    __buildMessage$id ) {
            
    $messageDiv = new div();
            
    $messageDiv->__setId$id );
            
    $messageDiv->__addContent$this->content );
            
    $messageDiv->__buildDiv();
            
    $this->output $messageDiv->__returnHtml();
        }

        public function 
    __returnHtml() {
            return 
    $this->output;
        }
    }
    ?>
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    Non ho capito bene qual e' l'errore, ma se vuoi proseguire l'esecuzione allora devi intercettare l'exception con try {} e catch {}: http://php.net/manual/en/language.exceptions.php

  5. #5
    Codice PHP:
    try {
        
    $d = new dirWrapper();
        
    $tree $d->__getDirectory'files/' );
        
    print_r$tree );
        }
    catch( 
    customException $e ) {
        echo 
    $e->__showMessage();

    si lo so..

    ma a pensarci bene forse sto chiedendo troppa iteratività al php.. mi sà che mi toca gestirmi con ajax..

    a spiegarla bene la cosa sarebbe che voglio visualizzare alcuni messaggi di "stato" durante l'esecuzione del codice php quindi per ogni operazione eseguita sui metodi delle classi mostrare di volta in volta cosa stà facendo lo script quindi per l'esempio sopra se consideriamo la classe "dirWrapper" come una classe di lettura delle cartelle fare tipo:

    Codice PHP:
        public function __getDirectory$directory ) {
            if ( 
    $handle opendir$directory ) ) {
    throw new 
    customException'leggo directory'2);
                
    $size 0;
                
    $folders 0;
                
    $files 0;
     
                while ( 
    FALSE !== ( $file readdir$handle ) ) ) {
    throw new 
    customException'leggo cartelle'2);
                    if ( 
    $file != "." && $file != ".." ) {
                        if ( 
    is_dir$directory $file ) ) {
    throw new 
    customException$directory ' è una cartella'2);
                            
    $array $this->__getDirectory$directory $file '/' );
                            
    $size += $array['size'];
                            
    $files += $array['files'];
                            
    $folders += $array['folders'];
                            } else {
                            
    $size += filesize$directory $file );
                            
    $files++;
                        }
                    }
                }
                
    closedir$handle );
            }
            
    $folders++;
            
            return array( 
    'size' => $size'files' => $files'folders' => $folders );
        } 
    ho semplificato un pò le cose ma a grandi linee si dovrebbe capire... ripetendo vorrei dire alla classe customException che se trova un "messaggio di stato" me lo mostra ma continua ad eseguire il codice..
    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Non capisco pero' perche' vuoi usare le exception solo per stampare dei messaggi di debug. Una exception significa che qualcosa e' andato storto, per semplici aggiornamenti di stato cos'ha "echo" che non va?

  7. #7
    Beh considerando che questa applicazione è un pò complessa vorrei affidarmi di piu al sistema proposto dagli sviluppatori per gestire gli errori.. credo che un "echo" non sia sufficente.. ..

    Potrei riempire un'array con i vari messaggi di stato e mostrarli in ultima assieme alla pagina poi piu avanti l'array lo gestisco con ajax per dare l'effetto di "sequenza" delle operazioni..
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Ma infatti le exceptions si usano per gestire gli errori non le comunicazioni.

  9. #9
    buona thanks..
    Questa volta, più che un voto.. è favoreggiamento.

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.