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

    tecnica di gestione delle excption, differenze tra java e php

    Ciao a tutti,

    volevo chiedervi come si utilizza il try/catch in php...

    In java, di solito, si procede cosi:

    try{

    //operazione su file
    //operazioni su http

    }catch(Excption per i file){

    }catch(Excption per connessione htpp)
    ......
    }catch(Excption){
    ......
    }

    Siccome non ho esperienza significativa in php, stavo codificando un programma che fa una query su db, scrive su file, e risponde con un oggetto json (OK o errore), inizialmente il mio codice era del tipo:

    .......
    $result = mysql_query($select_query) or die("SQL Error 1: " . mysql_error());
    .......
    file_put_contents($file, $testo, LOCK_EX) or die("Errore su file");
    .......
    "return"


    poi ho notato che è stato introdotto il try/catch in php, ho pensato di codificare un codice del tipo:


    try{
    $result = mysql_query($select_query);
    .......
    file_put_contents($file, $testo, LOCK_EX);
    .......
    }catch(Excpetion e){
    } catch (Exception $e) {

    $result[] = array(
    'result' => 'ERROR',
    'message' => $e->getMessage()
    );

    header("Content-Type: application/json");
    echo json_encode($result);
    }
    }

    io quello che mi aspettavo e che un errore nella query o nella scrittura di file mi avrebbe fatto entrare nel catch....cioè volevo gestire tutti le condizioni di errore in modo poi da ritornare l'oggetto json con la segnalazione. Però ho provato a far fallire la scrittura su file o non mi entra nel catch!

    C'è un motivo per questo comportamento? Di solito come si gestite questo tipo di siutazione con il try/catch?

    Thanks

    Diego

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Non è un problema di php...semplicemente mysql_query / file_put_contents non "lanciano" eccezioni, anche perchè sono funzioni
    Ma la stessa cosa, se non sbaglio, vale per Java o altri linguaggi...niente throw, niente catch.

    Se vuoi programmare più in stile OO ti direi di lasciar perdere mysql_* e passare a PDO, che fa uso delle eccezioni. Per la scrittura su file non saprei.
    Oppure ti fai una classe wrapper per query e scrittura/lettura e gestisci come meglio credi le eccezioni


  3. #3
    Allora vari punti:

    1) su php.net c'è la reference anche in italiano dove viene indicato se e quali eccezioni vengono lanciate. mysql_query e file_put_contents non lanciano eccezioni come ti è stato detto.

    Exceptions on query:

    Leggevo che sia PDO che mysqli_* non lanciano di default eccezioni ma devono essere istruiti a farlo. Quindi controlla

    http://stackoverflow.com/questions/8...ons-by-default
    http://stackoverflow.com/questions/1...ions-in-mysqli

    Altrimenti il check lo fai te:

    Codice PHP:


    class ModelRepository{

       private 
    $db;
       
       public function 
    __construct()
       {
            
    $this->db = new mysqli("localhost""my_user""my_password""world");
       }

        ...

        function 
    executeQuery($query){

           
    $result $this->db->query($query);
           
           if(
    false===$result)
           {
            throw new \
    Exception(sprintf('Impossibile eseguire la query %s : %s',$query,$this->db->error)
           }
               return 
    $result;
        }

        ...



    per i file lo stesso. Un modo sarebbe:

    Codice PHP:

    function writeToFile($file,$content)
    {

        
    $res = @file_put_contents($file,$content);
        
        if(
    $res===false)
        {
            throw new \
    Exception(sprintf('Unable to write on file %s',$file));
        }
        
        return 
    true//$res

    poi se ho scritto cavolate fatevene una ragione
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.