Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085

    eccezioni .. come funzionano ?

    Ciao,
    io vorrei inserire tutta la mia pagina php in una eccezione che mi esegua il Rollback in caso di un qualunque errore di sistema.

    Non avendo mai usato le eccezioni ho fatto un piccolo esempio di prova .. (simulando un errore per una variabile non dichiarata)

    cos'è che ho sbagliato ?
    grazie

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">      
    <html xmlns="http://www.w3.org/1999/xhtml" lang="it">         
    
    <body>    
    <div> 
    
    <?php 
    
    //====================================================  INIZIO ECCEZIONE
    
    try 
    {
    
    
    
    echo "**** INIZIO ELABORAZIONE ****  
    ";
    
    $esito = 'OK' ;                                                                                                    
    $err = '';   
    
    
    // ==================================================
    // --> ERRORE PER VARIABILE NON DEFINITA
    // ==================================================
    
    if($var_non_def == 1)
      {$var_non_def = '99' ; }
    
    
    echo "Elaborazione terminata correttamente !!  
    "; 
    
    
    
    //====================================================  FINE ECCEZIONE
    }
    
    catch (Exception $e)                                                         
        {
         echo "Esecuzione catch eccezione: ' 
    ";
        }      
    
    
    ?> 
    
    
     **** FINE ELABORAZIONE ****
    	
    </div>   
    </body> 
    </html>

  2. #2
    Utente di HTML.it L'avatar di Laxus
    Registrato dal
    Oct 2010
    Messaggi
    251
    trasforma gli errori in eccezioni: http://php.net/manual/en/class.errorexception.php

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    Già io con le eccezioni ho qualche difficoltà (diciamo 'qualche) .. così mi si complica la vita ancora di più !

    mi viene un dubbio ..
    ma si è in grado di testare un errore ?
    mi spiego ..
    se questo tipo di errore (variabile non dichiarata) non interrompe l'elaborazione della pagina ..
    si è in gardo di testare 'manualmente' (tipo testare una variabile) se nella fase precedente si sia verificato un errore ?

    Grazie

  4. #4
    Utente di HTML.it L'avatar di Laxus
    Registrato dal
    Oct 2010
    Messaggi
    251
    gli errori e le eccezioni sono due cose differenti.
    i 'notice' che tu vuoi catturare sono solo un avviso di php, non un errore fatale.
    se vuoi catturarli e gestirli come vuoi hai due possibilità: trasformarli in eccezioni e trattarli come tali o utilizzare set_error_handler con una tua funzione personalizzata

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    saresti così gentile da spiegarmi un attimo come funzionano queste 'set_error_handler' ?

    mi sembra di avere capito che ci sono i seguenti tipi di errore:

    - PARSE ERROR: tutte le istruzioni presenti, precedenti o successive alla riga in cui è presente l'errore, non verranno eseguite.

    - FATAL ERROR: le istruzione precedenti all'errore saranno eseguite, mentre quelle successive verranno ignorate.

    - WARNING / NOTICE / DEPRECATED / STRICT : verranno eseguite tutte le istruzioni sia precedenti sia successive all'istruzione incriminata.


    mi verrebbe da dire che la 'variabile non dichiarata' rientri nel terzo caso, visto che vengono eseguite tutte le istruzioni, prima e dopo l'errore.

    questi 'set_error_handler' valgono per qualsiasi dei sucitati errori ?
    grazie mille

  6. #6
    Utente di HTML.it L'avatar di Laxus
    Registrato dal
    Oct 2010
    Messaggi
    251
    mi sembra di avere capito che ci sono i seguenti tipi di errore:
    http://www.php.net/manual/en/errorfunc.constants.php
    questi 'set_error_handler' valgono per qualsiasi dei sucitati errori ?
    ovviamente no, ad esempio con un E_ERROR o E_PARSE non sarà possibile eseguire la funzione (perchè è tecnicamente impossibile farlo), ma sono perfetti per gli E_NOTICE e simili

    la pagina della documentazione su php.net può essere più chiara di qualsiasi post: http://php.net/manual/en/function.set-error-handler.php
    ti dirò però che non è sufficiente (almeno per me), per una migliore comprensione ti può essere d'aiuto cercare degli esempi di queste funzioni su google

  7. #7
    Se ti può interessare io ci ho scritto anche un articolino sulla gestione degli errori con set_error_handler
    http://www.miniscript.it/articoli/52...li_errori.html

    --------------
    Le eccezioni sono una cosa diversa e ammetto che neanche io ci sono avvezzo.
    In ogni caso questo è un esempio terra terra...
    Codice PHP:
    class Esempio_Exception extends Exception
    {}

    // una classe di esempio
    class Esempio{
        public function 
    numero_inferiore_di_cinque($numero){
            if(
    $numero<5){
                throw new 
    Esempio_Exception("ERRORE: Il numero è inferiore a 5");
                }
            return 
    TRUE;
            }
        }

    $class = New Esempio;
    try{
        
    $class->numero_inferiore_di_cinque(10);
        echo 
    'Il numero è superiore a 5';
        }
    catch(
    Esempio_Exception $errore){
        echo 
    $errore->getMessage();
        } 
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    grazie mille .. molto gentili !

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    Originariamente inviato da oly1982
    Se ti può interessare io ci ho scritto anche un articolino sulla gestione degli errori con set_error_handler
    articolo ben fatto .. semplice e chiaro ?

    ho un piccolo problema ..
    nascendo il tutto dall'esigenza di fare il rollback in caso di errore .. o riesco a dare in input alla funzione (My_Custom_Errors) anche il campo contenente la connessione al DB, oppure devo fare in modo che la funzione stessa, mi restituisca una variabile (valorizzata con return), che mi attesti che è successo un errore, testando appunto il suo contenuto.
    spero di essere stato chiaro !
    poi .. se ci fosse un altro modo, per poter testare se c'è stato un errore ..

  10. #10
    Secondo me stai facendo una confusione pazzesca fra errori ed eccezioni.

    Volendo darti un indirizzo:
    - gli errori generati devono essere corretti/evitati;
    - le eccezioni sollevate devono essere intercettate e gestite.

    La funzione set_error_handler interviene sul gestore degli errori di php (in realtà non sono tutti definibili propriamente errori ma sorvoliamo) che, come ben saprai, in caso di errore esegue la stampa a video degli errori che commetti. Con set_error_handler gli errori si verificheranno sempre ma ciò che modifichi è unicamente la "reazione" prodotta. Quindi non centra nulla con le eccezioni.

    La eccezioni vengono sollevate nei modi in cui ti ho fatto vedere in precedenza e per essere intercettate è richiesto il costrutto try-catch.

    Se il rollBack() a cui fai riferimento è quello del sistema PDO impiegato per gestire le transaction questo dovrebbe essere gestito con le eccezioni che vengono sollevate dalla classe PDOException.

    Magari aspetta che arrivi qualcuno più esperto di me che ti dia qualche dritta.
    Oppure posta il tuo codice di esempio per capire in che ambito stai operando.
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

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.