Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227

    [OOP] Dubbio su classi e database

    Salve a tutti ragazzi, ho un piccolo dubbio sulla programmazione OOP.
    Ho una classe principale che fa da intermediario per le azioni principali con un database, che posterò alla fine di questo messaggio.

    Come seconda cosa ho una classe dedicata all'utente, quindi con funzioni che mostrano i dati del suo profilo e funzioni secondarie.

    La domanda è: la classe utente necessita ovviamente di una connessione al database per poter ricavare i dati del profilo dell'utente, e deve poter sfruttare i metodi della classe database. Qual'è quindi il metodo ottimale per collegare le due classi? È meglio creare la classe utente come estensione della classe database (nel senso class Utente extends Database { }​ ), o creare un metodo all'interno della classe utente che inizializza un'istanza della classe database?

    Scusate se non sono stato chiarissimo, ma ho sempre programmato in procedurale, e solo da poco sto passando alla programmazione ad oggetti, e ho ancora qualche dubbio

    Di sotto vi posto i codici delle classi, per un'idea più precisa

    Classe Database

    Codice PHP:
    class Database {
        protected 
    $host 'localhost';
        protected 
    $name '';
        protected 
    $user '';
        protected 
    $password '';
            private 
    $dbh;
            private 
    $error;
            private 
    $stmt;
           
        public function 
    setAttr($key$value) {
            switch (
    $key) {
                case 
    'host':
                    
    $this->host $value;
                    break;
                case 
    'name':
                    
    $this->name $value
                    break;
                case 
    'user':
                    
    $this->user $value;
                    break;
                case 
    'password':
                    
    $this->password $value;
                    break;
            }
        }

        public function 
    connect () {
            
    $dsn 'mysql:host='.$this->host.';dbname='.$this->name;
            try {
                
    $this->dbh = new PDO($dsn$this->user$this->password);
            } catch (
    PDOException $e) {
                
    $this->error $e->getMessage();
            }
        }

        public function 
    query ($sql) {
            
    $this->stmt $this->dbh->query($sql);
        }

        public function 
    resultset () {
            
    $this->execute();
            return 
    $this->stmt->fetchAll(PDO::FETCH_ASSOC);
        }


    Classe Utente
    Codice PHP:
    class Utente {
        protected 
    $id_utente 0;
        protected 
    $database false;

        public function 
    __construct ($id_utente) {
            
    $this->id_utente = (int) $id_utente;
            
    $this->database = new Database();
            
    $this->database->connect();
        }

        public function 
    esempio () {
            
    $sql 'SELECT * FROM nome_tabella';
            
    $this->database->query($sql);
        }



  2. #2
    si presume che il database sia condiviso anche da altre classi ed essendo un processo molto usato nelle logiche di programmazione dovrai istanziare la classe db e passarla alle classi che ne hanno bisogno.

    questo di traduce in:
    Codice PHP:
    $db = new Database();

    $user = new User$db$id_utente ); 
    e la modifica sulla classe User:
    Codice PHP:
    public function __constructDatabase $db$id_utente ) {
            
    $this->id_utente = (int) $id_utente;
            
    $this->database $db;
            
    $this->database->connect();

    questo concetto si chiama aggregation
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    Grazie mille, esattamente quello che volevo 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.