Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di daveus
    Registrato dal
    Apr 2005
    Messaggi
    34

    [php5] OOP e gestione degli errori

    Ciao a tutti!

    Ho un quesito riguardo PHP5 e la gestione degli errori con la programmazione ad oggetti.

    Premetto che non ho mai programmato ad oggetti, quindi cercate di capirmi!

    Ho creato una classe che gestisce le connessioni al db
    qualcosa del genere:

    class mysql
    {
    function __construct()
    function connect()

    //esempio di come ho fatto un singolo metodo: è giusto?
    function query($sql)
    {
    if(
    $this->arrayquery[count($this->arrayquery)+1]['resource'] = mysql_query($sql, $this->handler_connessione);
    )
    return true;
    else
    return false;
    }

    function fetch()
    function close()
    function __destruct()
    }

    ogni metodo ritorna false in caso di errore, in caso contrario ritorna true.

    adesso faccio una cosa così:

    $objdb = new mysql(......);
    $objdb->query("select * from table"); //questo mi da errore. vorrei intercettare l'errore e salvare il numero di errore mysql in una variabile e mostrarlo poi a video.

    come faccio?

    grazie 1000 in anticipo!
    Ciao, Davide

  2. #2
    sarei interessato anche io a programmare ad oggetti...
    quali sono le tue fonti di inizio? (url...libri...etc...)
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  3. #3
    Utente di HTML.it L'avatar di daveus
    Registrato dal
    Apr 2005
    Messaggi
    34
    per ora mi sono letto degli script fatti con le classi di php4, letto un po' di documentazione zend e php.net
    Ciao, Davide

  4. #4
    [supersaibal]Originariamente inviato da daveus
    per ora mi sono letto degli script fatti con le classi di php4, letto un po' di documentazione zend e php.net [/supersaibal]
    se vuoi leggertene alcuni fatti con le classi in php5, fai un salto qui , ci sono anche esempi con Exception e gestione automatizzata degli errori ... qualcosa trovi anche qua
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    [supersaibal]Originariamente inviato da andr3a
    se vuoi leggertene alcuni fatti con le classi in php5, fai un salto qui , ci sono anche esempi con Exception e gestione automatizzata degli errori ... qualcosa trovi anche qua [/supersaibal]

    thx
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  6. #6
    Codice PHP:
    if(
    $this->arrayquery[count($this->arrayquery)+1]['resource'] = mysql_query($sql$this->handler_connessione);

    scusami,dentro l'if fai un'assegnazione, che restituisce sempre true;non dovresti fare un controllo,con "==" invece che un solo "=",sopodichè fai l'assegnazione?

    nel caso mysql_query non andasse a buon fine e restituisse false,alla fine false è un'assegnazione valida,quindi l'assegnazione restituirebbe comunque true, l'if è sempre e comunque positivo e il return della funzione è sempre e comunque true.
    o mi sbaglio? :master:

    si potrebbe fare una cosa del genere?
    Codice PHP:
    //metodo per fare una query MYSQL.
    function query($sql){
    $resource=mysql_query($sql$this->handler_connessione);
    //se la query è andata a buon fine
    if($resource)
      {
    //inserisco l'id resource nell'array e ritorno true;
       
    $this->arrayquery[count($this->arrayquery)+1]['resource'] = $resource;
       return 
    true;
      }
    //se la query era buona,la funzione è già uscita,se non
    // era buona salvo l'errore da qualche parte e restituisco false.
    $this->error=mysql_error();
    return 
    false


  7. #7
    per mostrare a video l'errore forse sarebbe più corretto(correggetemi se sbaglio,gli oggetti devo ancora capirli )creare una classe output che stampa a video,e all'interno della classe mysql creare un semplice metodo geterror() che non fa altro che ritornare la variabile error dell'oggetto mysql...

  8. #8
    Utente di HTML.it L'avatar di daveus
    Registrato dal
    Apr 2005
    Messaggi
    34
    [supersaibal]Originariamente inviato da COMANDANTE SPACE
    Codice PHP:
    if(
    $this->arrayquery[count($this->arrayquery)+1]['resource'] = mysql_query($sql$this->handler_connessione);

    scusami,dentro l'if fai un'assegnazione, che restituisce sempre true;non dovresti fare un controllo,con "==" invece che un solo "=",sopodichè fai l'assegnazione?

    nel caso mysql_query non andasse a buon fine e restituisse false,alla fine false è un'assegnazione valida,quindi l'assegnazione restituirebbe comunque true, l'if è sempre e comunque positivo e il return della funzione è sempre e comunque true.
    o mi sbaglio? :master:
    [/PHP] [/supersaibal]
    che diavolo stai dicendo willis?
    assegnazione restituisce true
    errore di mysql restituisce false
    risultato l'if è false, quindi esegue l'else e ritorna false alla funzione

    [supersaibal]Originariamente inviato da COMANDANTE SPACE
    si potrebbe fare una cosa del genere?
    Codice PHP:
    //metodo per fare una query MYSQL.
    function query($sql){
    $resource=mysql_query($sql$this->handler_connessione);
    //se la query è andata a buon fine
    if($resource)
      {
    //inserisco l'id resource nell'array e ritorno true;
       
    $this->arrayquery[count($this->arrayquery)+1]['resource'] = $resource;
       return 
    true;
      }
    //se la query era buona,la funzione è già uscita,se non
    // era buona salvo l'errore da qualche parte e restituisco false.
    $this->error=mysql_error();
    return 
    false

    [/supersaibal]
    beh è quello che volevo fare

    andr3a cosa mi consigli di vedere su quel sito che mi hai postato? sono un po' smarrito
    è veramente difficile entrare nella logica di questo php5!

    comunque, ho capito più o meno come funziona con try e catch

    quello che non ho capito è come il try capisce che gli oggetti e i metodi relativi generano errori... con i return false?
    e se c'è un return false, come faccio a sapere che tipo di errore è?
    Ciao, Davide

  9. #9
    la gestione degli errori si può fare + o - in tre modi:

    1) ogni funzione è programmata per restituire un determinato valore in caso di errore, ad esempio "0" o "false" o "-1".
    Ogni volta che si lancia una funzione se ne controlla il valore restituito e si capisce se è accaduto un errore.
    Il limite di questo metodo sta nel fatto che permette solo di capire che è avvenuto un errore, non di che tipo esso sia. In olte ad ogni chiamata di funzione bisogna far seguire il controllo e la gestione dell'errore relativo

    2) ogni funzione, in caso di errore, inserisce in alcune variabili globali, o in una classe, delle informazioni sull'errore ad esempio un codice identificativo ed una stringa esplicativa.
    Ogni volta che si lancia una funzione (o un metodo) bisogna controllare queste variabili globali o questa funzione per capire cosa è successo.
    Anche se con questo metodo si possono avere molte informazioni sull'errore avvenuto, comunque si è costretti a scrivere codice che intervalla codice del programma a codice di controllo. Questo è lo stile usato da PEAR

    3)se il linguaggio lo permette, e PHP 5 è uno di questi, si usa il paradigma delle eccezioni, tipico della programmazione orientata agli oggetti. Per un accenno a tale tecnica vedi qui
    Questo sistema permette di risolvere entrambi i problemi dei metodi precedenti.


  10. #10
    [supersaibal]Originariamente inviato da daveus
    che diavolo stai dicendo willis?
    assegnazione restituisce true
    errore di mysql restituisce false
    risultato l'if è false, quindi esegue l'else e ritorna false alla funzione
    [/supersaibal]
    non è che non mi fidavo di te ,però per convincermi definitivamente ho fatto una piccola prova
    Codice PHP:
    <?php
    $a
    =false;
    $b=19;
    if(
    $b=$a)
    {echo 
    "l'assegnazione è true";} 
    else {echo 
    "l'assegnazione è false";}
    ?>
    ed in effetti hai ragione tu.Però non capisco,se nell'if ci faccio un'assegnazione, per decidere quale ramo dell'if scegliere va a controllare il valore della variabile che ha subito l'assegnazione?quindi "if($a=$b)//eccetera" è un modo svelto di scrivere "$a=$b;if($a)//eccetera",dico bene?

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.