Ciao a tutti, avendo iniziato da poco ad approcciarmi alla programmazione ad oggetti, ho realizzato questa semplice classe per ottenere ,a partire da una query, tutti i risultati dei vari campi di una tabella.
Mi potreste dire se l'approccio è corretto?
Codice PHP:
class Database {
private $_rs;
private $_numero_campi;
private $_nome_campo;
private $_valore_richiesto;
private $_valore;
public $query;
public $_campo_richiesto;
public function __construct()
{
// imposto le variabili per la connessione al database ed effettuo il collegamento
$hostname = "localhost";
$database = "xxx";
$dusername = "root";
$dpassword = "xxx";
$connetti = mysql_connect($hostname, $dusername, $dpassword);
// if (!is_resource($this->_connetti)) {
// throw new Exception("Impossibile collegarsi al database!");
// }
$seleziona_db = mysql_select_db($database, $connetti);
// if (!($this->_seleziona_db)) {
// throw new Exception("Impossibile usare il database $this->_database!");
// }
}
private function ottieni_nomi_campi()
{
// a partire dalla query ,ottengo i nomi di tutti i campi di una determinata tabella
$this->rs = mysql_query($this->query);
$this->_numero_campi = mysql_num_fields($this->rs);
for($i = 0;$i < $this->_numero_campi;$i++) {
$this->_nome_campo[$i] = mysql_field_name($this->rs, $i);
}
}
private function verifica_esistenza_campo()
{
// partendo dal valore della proprietà, verifico se esiste il campo richiesto
if (in_array($this->_campo_richiesto, $this->_nome_campo)) {
return 1;
} else return 0;
}
private function valore_campo($numero_riga, $campo)
{
// ottengo il valore di un campo, considerando il numero della riga che mi interessa
mysql_data_seek($this->rs, $numero_riga);
$_valore = mysql_fetch_object($this->rs);
$_valore_richiesto = $_valore->$campo ;
return $_valore_richiesto ;
}
private function formatta($array_valori)
{
// formatto secondo la proprietà formatta ciascun campo richiesto sostituendo il valore al nome uguale al campo
$formatta = $this->formatta;
$array_campi = $this->campo_richiesto;
while (list(, $this->_campo_richiesto) = each($array_campi)) {
while (list(, $valore) = each($array_valori)) {
$formatta = eregi_replace($this->_campo_richiesto, $valore, $formatta);
}
}
return $formatta;
}
public function main()
{
// funzione principale che richiama le altre
// richiamo la funzione che trova i nomi dei campi partendo dalla tabella
$this->ottieni_nomi_campi();
// a seconda del numero di risultati inizio un ciclo per ogni risultato della query
//nb questo ciclo ovviamente sarà legato al numero di risultati ottenuto
for ($i = 0;$i <= 5;$i++) {
// creo array_campi per non svuotare l'array campo_richiesto
$array_campi = $this->campo_richiesto;
// array_risultato contiene un array con il risultato di ciascuna riga per ogni campo richiesto
$array_risultato = array();
// per ciascun campo richiesto...
while (list(, $this->_campo_richiesto) = each($array_campi)) {
// ...verifico l'esistenza
if ($this->verifica_esistenza_campo()) {
// ed eventualmente assegno il risultato nell'array che passerò alla formattazione
$array_risultato[] = $this->valore_campo($i, $this->_campo_richiesto);
} else die ("$this->_campo_richiesto è un Campo inesistente!");
}
// $array_risultato è un array che contiene tutti i risultati di una determinata riga
echo $this->formatta($array_risultato);
}
}
}
Questa è l'implementazionw
Codice PHP:
$prova = new Database();
$prova->query ="select * from categoria";
$prova->campo_richiesto =array("nome","id_categoria");
$prova->formatta="[*][b]Questa è la categoria id_categoria \"nome\"[/b]";
$prova->main();
Come approccio va bene?Fatemi sapere, grazie!