Newsgroup: it.comp.www.php
Titolo: le classi.

Salve.
Sto iniziando a prendere confidenza con la programmazione oop.
Volevo da voi un parere sul mio modo di procedere, cioe' se la soluzoine di 
un piccolo problema, a livello concettuale e' giusta oppure no.
Devo semplicemente inserire dei dati in un file di testo.
Quindi ho pensato a 2 oggetti: il file e l'insieme dei dati.
Ho creato una classe che mi serve a gestire il file, quindi ho i vari metodi 
per aprire, chiudere, fare il lock, ecc.
La classe col costruttore e':
class jfile{
 var $fileName;
 var $lastStatus;
 function jfile($fn) {
  $this->lastStatus = true;
  $this->fileName = $fn;
 }      
}
Nel codice ho:
$fileProxy = new jfile("mio_file");
Quindi ho pensato, "ok ora ho l'oggetto corrispondente al file che mi serve 
utilizzare".
Ora mi creo l'altro oggetto corrispondente ai dati da inserire:
class IPproxy {
 var $ip = '';
 var $nominativo = '';
 
 function IPproxy($ip, $nominativo){
  $this->ip = $ip;
  $this->nominativo = $nominativo;
 }
}
nel codice ho:
$ip_proxy = new IPproxy($a.".".$b.".".$c.".".$d, "#".$nome);
Gli argomenti sono passati da un form di una pagina web.
Dovrei ora inserire i dati, cioe' l'oggetto $ip_proxy nel file cioe' 
nell'oggetto $fileProxy.
E' cio' che non riesco a fare, ma prima di tutto volevo capire se e' giusto 
il modo di procedere.
Grazie.

 giusto il modo di procedere.
dipende fortemente da come usi i dati e i files.
se è la prima cosa che ti viene in mente, è anche facile che sia la + 
semplice.
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.gnu.org/philosophy/free-sw.it.html

 essere scritto, oppure lo passi al metodo WriteMe quando lo usi.
E' una buona idea ma come faccio a passare a writeMe il file su cui deve essere
scritto?
Io ho questi oggetti:
$ip_proxy = new IPproxy($a.".".$b.".".$c.".".$d, $nome);
$fileProxy = new jfile("miofile");
Grazie.
 

 $fileProxy = new jfile("miofile");
IPProxy potrebbe avere in +:
var $file;
function WriteME() {
 $this->$file->scrivi("dati"); //funzione di jfile
}
quindi usare $ip_proxy->file=$fileProxy; o meglio:
$ip_proxy = new IPproxy($a.".".$b.".".$c.".".$d, $nome);
$ip_proxy->file = new jfile("miofile");
li incapsuli.
poi non so se questo si adatta alle tue esigenze. è solo un esempio.
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.php.net

 li incapsuli.
Ho fatto cosi':
ho aggiunto alla classe jfile il metodo:
function getFile(){
 return $this->fileHandle;
}
nella classe IPproxy ho:
function writeMe($fp){
 $line = $this->ip."\t".$this->nominativo."\n";
 fputs($fp, $line);
}
poi nel codice ho messo: 
$ip_proxy = new IPproxy($a.".".$b.".".$c.".".$d, $nome);
$fileProxy = new jfile("miofile");
$fileProxy->openFileAsLocked("a",2);
$fn = $fileProxy->getFile();
$ip_proxy->writeMe($fn);
$fileProxy->closeLockedFile();
Che ne pensi?
Ciao.

, punkarruso wrote:

poco di classe, ma funziona...
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.nist.gov/dads/

 poco di classe, ma funziona...
Come poco di classe?
Dai se c'e' qualcosa da sistemare correggimi pure, ho iniziato a lavorare 
con le classi da poco e voglio fare le cose per bene sopratutto a livello 
concettuale.
Ciao.  

 $ip_proxy->writeMe($fn);
a:
$ip_proxy->writeMe($fileProxy->getFile());
tenere $fn in una variabile separata non a tanto senso perché:
1 - puoi scrivere una linea di codice in meno
2 - avresti due istanze dello stesso valore
3 - se vuoi riutilizzare $fn e cambi il valore di $fileProxy, dovresti 
riaggiornare anche $fn, quindi tanto vale prenderlo direttamente.
per l'incapsulamento delle classi non ti posso aiutare, dovrei avere BENE in 
mente quello che ti serve fare e come lo userai nella crescita del 
progetto.
comunque concettualmente vedrei meglio una cosa del genere:
$ip_proxy = new IPproxy($a.".".$b.".".$c.".".$d, $nome);
$ip_proxy->setFile("miofile")
$ip_proxy->openFileAsLocked("a",2);
$ip_proxy->writeMe();
$ip_proxy->closeLockedFile();
cosa voglio dire:
se tanto sai che $ip_proxy ha strettamente bisogno di una classe jfile, 
tanto vale estenderla ed inglobarne le funzioni all'interno.
in questo modo istanzi una sola classe.
poi, la clesse jfile è comunque già scritta e utilizzabile per altri scopi.
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.efluxa.it/netiquette/

 
Ho capito.
Pero' concettualmente, se si potesse fare un paragone con qualcosa nella vita
reale, l'oggetto ip_proxy dovrebbe essere, secondo il mio modo di vedere che
comunque potrebbe anche essere sbagliato, un qualcosa a se stante.
Cosi' pure l'oggetto file.
Cioe' IPproxy non e' un file con maggiori funzionalita' rispetto a jfile.
Nella vita reale l'oggetto macchina a benzina e' un'estensione della classe
macchina ma e' sempre una macchina, non puo' essere un'estensione della classe
palazzo, non so se sono riuscito a spiegarmi.
Almeno questo e' cio' che mi e' venuto in mente al momento della creazione
delle classi.
Preciso, da perfetto profano.
Ciao.