Newsgroup: it.comp.www.php
Titolo: programmazione ad oggetti

Salve,
è un po' che da dilettante traffico con php per creare siti 
ed interfacciarli al db Mysql.
Ora stavo creando un piccolo gestionale per un parente e per 
la prima volta ho realizzato delle piccole porzioni di 
codice generale che leggono nomi e tipi di campi e generano 
in automatico le schede per visualizzare tabelle, form, ecc.
Un amico (informatico di professione) mi ha consigliato di 
passare alla programmazione ad oggetti e pian piano mi sto 
avvicinando a questa logica. In Internet però, aldilà dei 
concetti teorici su attributi, metodi e classi faccio fatica 
a trovare dei tutorials pratici circa php 5 e oop.
Ho iniziato a sviluppare la seguente classe
class mysql {
	var $host ;
         var $user ;
         var $pass ;
         var $database;
         var $conn;  // @var string conn Per la connessione
         var $query; // @var string query  Per la query
	var $tabella;
	var $nomecampo;
	var $tipocampo;
	var $numcampi;
	var $id;
function __construct() {
             $this->host = 'localhost';
             $this->user = 'root';
             $this->pass = 'peci63';
             $this->database = 'giardinigest';
             $this->conn = 
mysql_connect($this->host,$this->user,$this->pass) or 
$this->Error(mysql_error());
             $DB = mysql_query('use '.$this->database) or 
$this->Error(mysql_error());
$tutto = mysql_query("describe $this->tabella ");
$numcampi=-1;
while ($vc=mysql_fetch_array($tutto)) {
$numcampi++;
$this->nomecampo[$numcampi]=$vc["Field"];
//$tipocampo[$numcampi]=$vc["Type"];
echo $nomecampo[$c]."<br />";
             return true;
}
}
function nomi() {
/*
convenzioni adottate per nominare i campi:
id 			= numero autom di identificazione
id_xxx 		= collegamento all'id di un'altra tabella
autoc_nomecampo		= campo con select per l'autocompletamento
autoc_nomecampo__table	= collegamento ad un'altra table per 
l'autocompletamento
*/
for ($c=0;$c<$this->numcampi;$c++) {
echo $nomecampo[$c]."<br />";
}
/*
if (substr($this->nomecampo[$c],0,3)=="id_") {}
if (substr($tipocampo[$c],0,7)=="varchar") {
if (substr($this->nomecampo[$c],0,6)=="autoc_") {
if (strstr($this->nomecampo[$c],"__")) {echo 
str_replace("_"," 
",substr($this->nomecampo[$c],5,(strlen($this->nomecampo[$c])-strlen(strstr($this->nomecampo[$c],"__"))-5)));
}
else {echo str_replace("_"," ",substr($this->nomecampo[$c],5));}
}
else {echo str_replace("_"," ",$this->nomecampo[$c]);}
}
if (substr($this->tipocampo[$c],0,4)=="text") {echo 
str_replace("_"," ",$this->nomecampo[$c]);}
if (substr($this->tipocampo[$c],0,4)=="date") {echo 
str_replace("_"," ",$this->nomecampo[$c]);}
if (substr($this->tipocampo[$c],0,5)=="float") {echo 
str_replace("_"," ",$this->nomecampo[$c]);}
}
*/
}
function valori($c) {
if (substr($nomecampo[$c],0,3)=="id_") {}
if (substr($tipocampo[$c],0,7)=="varchar") {echo $vc[$c];}
if (substr($tipocampo[$c],0,4)=="text") {echo $vc[$c];}
if (substr($tipocampo[$c],0,4)=="date") {echo 
substr($vc[$c],8,2)."-".substr($vc[$c],5,2)."-".substr($vc[$c],0,4);}
if (substr($tipocampo[$c],0,5)=="float") {echo 
number_format($vc[$c],2,",",".");}
}
function visualizza_scheda() {
?>
<h3><?php echo $this->tabella;?></h3>
<table style="width:600px;" summary="tabella" >
<?php
$tutto = mysql_query(
"select * from $this->tabella where id=$this->id ") or 
die("query
fallita: " .mysql_error());
while ($vc=mysql_fetch_array($tutto)) {
for ($c=0;$c<$this->numcampi;$c++) {
if (substr($nomecampo[$c],0,2)<>"id") {
echo "<tr><td class=\"nomi pic dx verde s\">";
nomi($c);
echo "&nbsp;&nbsp;</td><td class=\"valori sx s\">";
echo valori($c);
echo "</td></tr>";
}
}
}
}
}
per il momento non badate al funzionamento. Volevo solo 
chiedere a cosa serve la function __construct() ?
Io l'ho colta come il luogo dove dare un valore alle 
variabili attributi che poi userò nelle varie 
funzioni/metodi. Solo che qui volevo fissare anche i due 
array nomecampo e tipocampo che mi serviranno per ricavare 
(con vari if) i nomi dei campi e visualizzare valori, tipi 
di input dei form ecc. E questi affay dovrebbero essere 
disponibili-visibili nei vari metodi.
Probabilmente non penso ancora ad oggetti, certamente sarà 
un modo più ordinato per programmare, ma a me richiama tanto 
le vecchie care function con l'aggiunta di $this-> per 
richiamare le variabili.
Grazie a chiunque mi darà qualche spunto o alcuni url dove 
reperire  dei tutorials pratici su php e oop (possibilmente 
in italiano).
Franco

 Volevo solo chiedere a cosa serve la function __construct() ?  
Ti consiglio di iniziare leggendo il manuale ufficiale:
http://www.php.net/manual/en/language.oop5.decon.php
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 function con l'aggiunta di $this-> per richiamare le variabili.
Mi ricorda una vecchia discussione con il sottoscritto che aveva piu' o 
meno la tua stessa posizione. Non e' proprio cosi' ma in prima 
approssimazione certi parallelismi possono aiutare.
Dissento invece dal modo piu "ordinato di programmare". Usare una 
classe, lasciamo da parte tutta la teoria degli overloading e della 
eraditarieta' che sono importanti (piu' la seconda della prima) ma 
possono essere fuorvianti, confina (o dovrebbe) all'interno della classe 
i comportamenti e le caratteristiche dell'oggetto e consente soprattutto 
la multiistanza (nonche' la definizione di "funzioni" con lo stesso 
nome, ma in classi diverse) che invece con le funzioni classiche non e' 
consentita.
Comunque per capire le "classi" non c'e' necessita che ti limiti 
all'ambiente PHP va bene qualsiasi altro ambiente, tipo java o .net (..o 
un ambiente astratto) che lavorano solo ed esclusivamente per oggetti ed 
hanno una vastissima letteratura al riguardo.
-- 
ac
y-1=x