Newsgroup: it.comp.www.php
Titolo: Consiglio su classe e metodi get e set

Ciao a tutti,
gradirei una vostra opinione sul seguente approccio alle classi:
class base {
var $variables = array();	
function getvar($var) 
   {
    return $this->variables[$var];
   }				 
function setvar($var, $u)
   {
   $this->variables[$var] = $u;
   }			
} //end class
Sostanzialmente, sono stato ispirato dalla pigrizia di non voler
scrivere un metodo get... e un metodo set... per ogni variabile (e non
avendo trovato un code generator free che mi soddisfacesse, anzi se ne
conoscete qualcuno...).
Ritenete valido questo approccio? quali controindicazioni vedete?
Ringrazio e saluto
Roberto
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Ritenete valido questo approccio? quali controindicazioni vedete?
Le controindicazioni al tuo approccio, imho, sono queste:
1- non viene verificata l'esistenza delle variabili da leggere/scrivere
2- non viene verificata la validità del valore da scrivere
Mi spiego meglio...
Detta in soldoni, i metodi set e get nelle classi, come tutti i metodi nella
OOP, servono a nascondere all'utilizzatore la complessità "interna"
dell'oggetto, limitandone la "libertà di scelta" a ciò che l'oggetto è
programmato per fare.
Nel tuo caso invece permetti l'accesso indiscriminato a qualunque variabile,
anche non esistente, e permetti di impostare anche valori non validi.
class MyClass {
    var $variables = array();
    function MyClass() {
        $this->variables["a"] = 1;
        $this->variables["b"] = array("c" => 0, "d" =>1);
    }
    function getvar($var) {
        return $this->variables[$var];
    }
    function setvar($var, $u) {
        $this->variables[$var] = $u;
    }
}
$test = new MyClass();
Con i tuoi metodi questo è possibile:
$test->getvar("pippo");                    // ottieni "Notice: Undefined
index: pippo in ..."
$test->setvar("a", "pluto");              // a deve essere numerico
$test->setvar("b", "paperino");        // b deve essere un array associativo
NB: così come sono implementate le classi in PHP 4.x non è possibile
impostare a protetta o privata la visibilità di una variabile (ovvero è
sempre possibile raggiungerle con $class->var) e quindi avere un pieno
controllo sull'accesso da parte dell'utente (=programmatore).
Ma dato che ciò sarà (finalmente) possibile in PHP 5, se decidi di creare
dei metodi get/set ti consiglio di progettare le classi già con questa nuova
ottica, così ti sarà più facile portare il codice nella futura versione.
Saluti
LB

ottica, così ti sarà più facile portare il codice nella futura versione.
Infatti, mi sto mettendo già da subito in quell'ottica, ma rimango
pigro e non ho voglia di riscrivere tutto il codice :-)
Saluti
RP

 pigro e non ho voglia di riscrivere tutto il codice :-)
Copia&Incolla, Copia&Incolla, Copia&Incolla, Copia&Incolla, Copia&Incolla,
Copia&Incolla, Copia&Incolla, Copia&Incolla, Copia&Incolla, Copia&Incolla,
Copia&Incolla, Copia&Incolla, Copia&Incolla, Copia&Incolla, Copia&Incolla,
Copia&Incolla, Copia&Incolla,...
...visto come è facile!?  ^_^
Saluti incollati
LB

Il 14 Mag 2004, 23:23, Robbie <Rob...@NOSPAM.it> ha scritto:
Ciao,
i metodi tipo "get", "set" e "call" in PHP4 sono sperimentali ma esistono e
funzionano
http://www.php.net/overload
http://freephp.html.it/articoli/view_articolo.asp?id=104
In PHP5 sono definitivi ed è cambiato leggermente il loro utilizzo
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/