Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: omettere try&catch

  1. #1

    omettere try&catch

    dunque ho una classe Demo che ha il seguente metodo

    public function setName($name) {
    if(!is_string($name) || strlen($name) == 0) {
    throw new Exception("blob!");
    }
    }

    in una pagina php scrivo:

    $objDemo = new Demo();
    $objDemo->setName(37);

    ecco a questo punto mi viene sollevata l'eccezione
    se io non la metto in un try&catch ottengo : Uncaught exception ...

    si puo' fare in modo che non sia obbligatorio metterla in un
    try&catch???(insomma che non mi resituisca l'errore)

    perchè in un libro ho trovato un esempio simile e ho pensato che magari
    settando qualcosa si puo' evitare di metterla in un try&catch ed ottenere
    cmq il messaggio dell'eccezione(in questo caso "blob!"), non so eh poi
    magari è un errore del libro

    grazie

  2. #2
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Le eccezioni servono per generare un errore da gestire con try/catch.
    Se non usi try/catch che le usi a fare le eccezioni?
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

  3. #3
    oppure generi una tua classe per gestirti le eccessioni.. quando istanzi un oggetto , questa classe potrebbe fare il try catch e mostrare come errore una stringa che tu hai passato al costruttore...

    In questo modo non dovrai più scrivere il codicxe try catch =)
    --
    http://rastagnoli.altervista.org

  4. #4
    Originariamente inviato da chris
    Le eccezioni servono per generare un errore da gestire con try/catch.
    Se non usi try/catch che le usi a fare le eccezioni?
    hai ragione!!!
    difatti trovavo la cosa alquanto strana

    forse è sbagliato il codice del libro

  5. #5
    Originariamente inviato da knottyboy
    oppure generi una tua classe per gestirti le eccessioni.. quando istanzi un oggetto , questa classe potrebbe fare il try catch e mostrare come errore una stringa che tu hai passato al costruttore...

    In questo modo non dovrai più scrivere il codicxe try catch =)
    mica ho capito, la tua classe usa cmq try & catch?. se puoi fammi un esempio grazie

  6. #6
    Se usi le eccezzioni DEVI usare il try catch.

    Una cosa di questo tipo:
    e tutto quello che devi fare, oltre che includere il codice di questa classe è:

    KnottyException::Genera("Mapporc!!!");

    class KnottyException
    {
    public static function Genera($errore = 'Errore sconosciuto')
    {
    try
    {
    throw new Exception ($errore);
    }
    catch(Exception $E)
    {
    echo $E->getMessage();
    }
    }
    }

    Il metodo è statico e può essere richiamato senza istanziare la classe. Quindi se avrai bisogno fi un'eccezzione potrai generarla lo stesso.

    Ma poi se ci pensi ha poco senso... non so nemmeno io che cosa avevo in testa =). Ma mi spieghi perchè ce l'hai con il try catch?
    --
    http://rastagnoli.altervista.org

  7. #7
    ma niente , è quel cavolo di libro che mi ha stortato.

    mettiamoci una pietra sopra, sara' stato sbagliato il testo

    grazie cmq

  8. #8
    None: nelle classi metti solo throw new Exception, ma il try catch lo devi mettere nella pagina che usa quelle classi..
    --
    http://rastagnoli.altervista.org

  9. #9
    Originariamente inviato da knottyboy
    Se usi le eccezzioni DEVI usare il try catch.
    permettimi di non essere d'accordo con questa affermazione forse incompleta ma in questo modo inesatta.

    Le eccezioni le puoi usare quando vuoi, è il throw che non puoi usare se non per terminare un try e passare al catch.

    Esempio
    codice:
    <?php
    function myException($errno, $errstr, $errfile, $errline) {
    	echo $errstr;
    }
    set_error_handler('myException');
    $e = new Exception('something wrong');
    trigger_error($e->getMessage());
    ?>
    come vedi ho usato le eccezioni , in modo sicuramente poco utile ma le ho comunque usate senza avere erorri fatali



    Originariamente inviato da Prazision
    evitare di metterla in un try&catch ed ottenere
    cmq il messaggio dell'eccezione(in questo caso "blob!")
    dipende cosa intendi per ottenere il messaggio di errore.
    Se la tua intenzione è quella di fermare l'applicativo allora puoi usare exit("blob!"); senza dover usare il throw, poichè lo scopo dello stesso è quello di "killare" un try e non di creare errori.

    Per generare errori tuoi puoi sfruttare trigger_error e gestirli come meglio credi nella funzione impostata nel set_error_handler ... come mostrato nell' esempio sopra (dove uso la classe Exception ma potresti inviare direttamente il tipo di errore).

    Concludo dicendo che probabilmente nel tuo libro le cose stanno cosi':
    codice:
    // la classe ed il suo metodo
    public function setName($name) {
    if(!is_string($name) || strlen($name) == 0) {
    throw new Exception("blob!");
    }
    }
    // il resto della classe ...
    
    
    
    $objDemo = new Demo();
    try {
    	$objDemo->setName(37); // all' interno c'e' un throw
    }
    catch(Exception $e) {
    	echo $e->getMessage();
    }
    Oppure potrebbe essere una svista o un errore di stampa.

    Non so se ti ho risolto il problema, spero almeno di averti chiarito un po' il discorso errori ed eccezioni.

    Aggiungo un agglomerato intule che include di tutto, se hai capito gli esempi sopra puoi sbizzarrirti con questo
    codice:
    function myException($errno, $errstr, $errfile, $errline) {
    	echo $errstr;
    }
    set_error_handler('myException');
    try{
    	throw new Exception('something wrong');
    }
    catch(Exception $e){
    	trigger_error($e->getMessage());
    }
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    grazie, appena ho tempo(mi sa che non sara' a breve) ci guardo e ti faccio sapere

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.