Visualizza i risultati del sondaggio: Vi piace la classe?

Chi ha votato
2. Non puoi votare questo sondaggio
  • Si

    0 0%
  • No

    2 100.00%
Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670

    Classe Mysql, vi piace? :-)

    Ciao a tutti,
    Sono consapevole che è pieno zeppo il web di classi già fatte in php per gestire mysql...
    Solo che mi sono avvicinato alle classi da pochissimo tempo per questo motivo vorrei un vostro parere circa eventuali miglioramenti da fare...diciamo alla base della classe... per ora c'è poco, magari qualche consiglio non so

    grazieeeeee


    codice:
    class MysqlException extends Exception {};
    class MysqlConnection extends MysqlException {};
    class DatabaseError extends MysqlException {};
    
    class Mysql{
    
        private $conn, $host, $user, $password, $database;
    
        public function __construct($host, $user, $password, $database='', $connect=true){
            $this->host     = $host;
            $this->user     = $user;
            $this->password = $password;
            $this->database = $database;
    
            if ($connect) $this->connect();
        }
        
        public function __destruct(){
            $this->close();
        }
    
        public function connect(){
            $this->conn = mysql_connect($this->host, $this->user, $this->password);
    
            if (!$this->conn)
                throw new MysqlConnection("Impossibile connettersi al database");
            else
                $this->set_database($this->database);
        }
    
        public function close(){
            if ($this->conn){
                if (!mysql_close($this-conn)) throw new MysqlConnection("Impossibile chiudere la connessione al database");
            }
        }
    
        public function set_database($database){
            if (trim($database) && $this->conn){
                if (!mysql_select_db($database, $this->conn)) throw new DatabaseError("Impossibile selezionare il database");
            }
        }
    
    
    }

  2. #2
    Beh per il momento non fa nulla di diverso dalle funzioni built-in, se la estendi con funzioni che agevolino le operazioni comuni, o che comunque diano qualcosa in piu' delle funzioni di sistema, allora possiamo darti un parere.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    oook

    più che altro volevo sapere se la gestione degli errori fosse corretta..

  4. #4
    Originariamente inviato da ombra
    oook

    più che altro volevo sapere se la gestione degli errori fosse corretta..
    Mah...imho puoi fare una classe generica per gestire gli errori.
    A questa classe passi, se vuoi, il tipo di errore e magari gli fai costruire un minimo di grafica e un debug back trace, così sai dove si verifica il problema.
    Infatti...se c'è un errore attualmente sai solo che c'è...ma quando userai le classi in un progetto "corposo" con magari delle classi che fanno query in vari metoi, non avrai idea di dove è l' errore (in che metodo? Di che classe? In che riga?)

    Esempietto di funzione di debug
    Codice PHP:
    function getDebugBacktrace($NL "
    "
    ) {
            if (
    $this->vars["debug_compatibility"] == 0) {
                
    $dbgTrace debug_backtrace();
                
    $dbgMsg .= $NL."<h3>[b]Debug backtrace begin:[/b]</h3><div class=\"error1\">";
                foreach(
    $dbgTrace as $dbgIndex => $dbgInfo) {
                    
    $vars "";
                    foreach (
    $dbgInfo["args"] as $index => $argomento) {
                        if (
    is_object($argomento)) {
                            
    $vars "Object of: " get_class($argomento);
                        } else {
                            if (
    is_array($argomento) and sizeof($argomento) > 0) {
                                foreach (
    $argomento as $chiave => $valore) {
                                    if (
    is_object($valore)) {
                                        
    $vars "Object of: " get_class($valore);
                                    } else {
                                        
    $vars .= "<blockquote>";
                                        
    $vars .= $this->varDump($valore);
                                        
    $vars .= "</blockquote>";
                                        
    $vars $this->my_nl2br($vars);
                                    }
                                }
                            } elseif (
    is_object($argomento)) {
                                
    $vars "Object of: " get_class($argomento);
                            } else {
                                
    $vars $argomento;
                            }
                        }
                    }
                    
    $dbgMsg .= "\t at {$dbgIndex}  [i] {$dbgInfo['file']} [/i] (line {$dbgInfo['line']}) -> <u>{$dbgInfo['function']}</u>( {$vars} ){$NL}";
                }
                
    $dbgMsg .= "</div><h3>[b]Debug backtrace end[/b]</h3>{$NL}";
                return 
    $dbgMsg;
            } else {
                return 
    "";
            }
        } 
    Inoltre...conviene che crei una classe "generica" che inizializza un po' di cose (es. le connessioni al db, varie variabili che userai in giro per il software, i cookie ecc). Questa classe la instanzi all'inizio di ogni chiamata e la assegni per referenza in ogni classe che crei ($news = new news($super_classe), dove news ha il suo costruttore del tipo
    Codice PHP:
    class news{

        private 
    $super_classe,
        
    $altra_variabile_privata;
        public 
    $notizia,
        
    $id_notizia;

        function 
    news(&$super_classe) {
            
    $this->super_classe $super_classe;
        }


    Quando quindi dovrai fare operazioni sui db, per esempio, userai $this->super_classe->db->sql_lib->exec_cache_query("utente_from_id", 5), se dovrai recuperare un cookie $this->super_classe->cookie->get_cookie_value("login_name"), se devi recuperare il percorso delle immagini per la grafica $this->super_classe->var["img_path"] ecc


  5. #5
    visto che è la n classe su mysql
    be si fa presente che esistono oltre alle
    http://www.php.net/manual/en/ref.mysql.php
    le funzioni (migliori la i sta appunto per improved)
    http://www.php.net/manual/en/book.mysqli.php

    e php data object
    http://www.php.net/manual/en/book.pdo.php


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6
    Originariamente inviato da Dascos
    Mah...imho puoi fare una classe generica per gestire gli errori.
    (...)
    Esempietto di funzione di debug
    Codice PHP:
    function getDebugBacktrace($NL "
    "
    ) {
    etc etc

    Con la programmazione ad oggetti ho molte difficoltà data il mio passato da autodidatta con fonti web... però sono interessato all'aspetto legato alla gestione degli errori php. Io faccio diversamente da come descritto da te e chiedo a tutti coloro che mi volessero dare una dritta se è corretto come metodologia.

    In fase di sviluppo dei miei script io imposto error_reporting(MASSIMA_SEVERITA') e il display di tutti gli errori (anche i notice...).

    Quando poi passo on line tali impostazioni le rimuovo e nel .htaccess nella root del sito metto
    codice:
    php_value error_reporting 30719
    php_flag display_errors off
    php_flag log_errors on
    php_value track_errors on
    php_value error_log  C:/xampp/htdocs/classi/PHP_errors.log
    # poi il lock del file...
    In questo modo mettendo il display ad off:
    - evito "traumi" ad utenti in buona fede
    - evito di dare info sull'errore (rigo/file/funzione/classe incriminate) ad un utente malintenzionato

    ma salvando gli errori su PHP_errors.log ho un report di tutto... quel file poi lo leggo con php facendone un parse e verifico che và tutto liscio...

    E' sbagliato?
    Vi è un modo migliore di operare?
    E' possibile strutturare una meccanismo di notifica dell'errore tramite email (cosa che nn sò fare)?
    rispondetemi tenendo presente che spesso mi servo di hosting in cui non ho accesso al di fuori della document root e del php.ini

  7. #7
    @oly1982: puoi usare set_error_handler() per eseguire il codice che vuoi quando si verificano errori (quindi anche inviare mail), trovi info ed esempi sulla pagina del manuale.

  8. #8
    Beh...la mia funzione ovviamente viene chiamata a fronte di un errore tramite la ridefinizione degli "handler":
    set_error_handler("my_error_handler");
    e la funzione my_error_handler ha il necessario per capire se si tratta di produzione o di sviluppo. Se si tratta di sviluppo visualizza a video in base alla funzione che ti ho sritto, altrimenti invia una mail (con il medesimo contenuto)
    Per capire se si tratta di sviluppo o produzione di solito setto una variabile di tipo env nel corrispondente server web e leggo quella variabile

  9. #9
    Se ho capito bene... è facilissima da usare...
    Codice PHP:
    function my_gestione_errori($levello_errore$descrizione_errore$file_errore$riga_errore)
        {
        
    // con i 4 parametri faccio quello che mi pare
        // salvo nel db (mysql/.txt/.log/.db)
        // invio una email
        // etc. etc.
        
    echo '<h1>DEFICIENTE!!</H1>';
        }

    $variabile_che_non_so_cosa_farmene set_error_handler("my_gestione_errori");

    $var strlen(); // la funzione strlen aspetta almeno un parametro... 

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 © 2024 vBulletin Solutions, Inc. All rights reserved.