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?
Questa è l'implementazionwCodice 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);
}
}
}
Come approccio va bene?Fatemi sapere, grazie!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();

Rispondi quotando
del resto è inutile rendere pubblica una classe che praticamente fa le stesse cose che fa il php con le varie funzioni mysql con la differenza che aggiungo la gestione errori...per quanto riguarda la oop il tuo codice non riesco a capire come sia riusabile...nel senso...mettiamo che io abbia questa tabella