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);
}
}