tutti i consigli su questa classe?

Stato
Discussione chiusa ad ulteriori risposte.

vincy6

Utente Silver
27 Giugno 2009
0
0
0
55
PHP:
class db{
    var $host="localhost";
    var $name="my_vincy6web";
    var $user="vincy6web";
    var $pass="";
    var $connect;
    var $select;
    public function connect(){
        $this->connect=mysql_connect($this->host,$this->user,$this->pass);
        if(!$this->connect){
            return false;
            print "Errore durante la connessione al database, se l'errore persiste contattare l'admin.";
        }else{
            $this->select();
        }
    }
    public function select(){
        $this->select=mysql_select_db($this->connect,$this->name);
        if(!$this->select){
            print "Errore durante la slezione del database, se l'errore persiste contattare l'admin";
        }
    }
}
$db=new db();
$db->connect();
?>
 
Dopo il return il print non si vede (l'hai provata?)
Il costruttore, con i dati per la connessione
una funzione per le query generiche, e tante per operazioni specifiche
attributi privati

inutile, dato che mysqli fa tutto quello di cui avresti bisogno
 
aggiunto il costruttore e risolto il fatto della print.
Codice:
class db{
    var $host;
    var $name;
    var $user;
    var $pass;
    var $connect;
    var $select;
    public function __construct($host,$name,$user,$pass){
        $this->host=$host;
        $this->name=$name;
        $this->user=$user;
        $this->pass=$pass;
    }
    public function __destruct(){
        print "Fine script,pagina caricata!";
        #mysql_close($this->connetc);
    }
    public function connect(){
        $this->connect=mysql_connect($this->host,$this->user,$this->pass);
        if(!$this->connect){
            print "Errore durante la connessione al database, se l'errore persiste contattare l'admin.";
        }else{
            $this->select();
        }
    }
    public function select(){
        $this->select=mysql_select_db($this->connect,$this->name);
        if(!$this->select){
            print "Errore durante la slezione del database, se l'errore persiste contattare l'admin";
        }
    }
}
$db=new db("localhost","my_****","****","****");
$db->connect();


raga dite tutto quello che potete dire.... io ora sto studiandole oop!
....
sono all'ereditarite o come si dice xD
 
Gli attributi vanno messi privati... poi se questa classe dovrebbe astrarre un db direi che mancano parecchi metodi.
 
quali metodi?
perche privati?(Non riesco a rendermi conto quando mettere pubblico o privato,anche come non riesco a rendermi conto quando devo usare l'ereditarieta)
se potreste spiegarmelo e risp alla prima dom sarebbe un enorme piacere...
grazie di tutte len risposte gia date e quelle che darete
 
Se ne è già parlato parecchio in questo forum anche.. leggiti questa discussione ( http://forum.infernet.ws/-php-guestbook-t-15499.html )
 
( a parte che i print dentro la classe nn mi sono mai piaciuti, anche se in certi casi possono essere accettati)

"non so quando usare l'ereditarietà?" beh, l'ereditarietà consiste nel creare una classe ereditando metodi ed attributi della classe parent, essi poi possono essere, al limite, overriddati, tramite la ridefinizione del metodo/attributo. In sostanza, l'ereditarietà si usa principalmente:

1) se per qualche motivo è necessario/si desidera modificare parzialmente una qualche classe di terzi

2)quando, dopo aver creato una classe generale, con metodi comuni e sempre validi, si vuole creare classi specifiche a seconda di vari casi, dunque, invece di ripetere ad esempio lo stesso metodo per ogni classe, lo si inserisce nella classe parent, da cui verrà ereditato.
 
ah già, leva quel print e vai di eccezioni

http://it2.php.net/manual/en/class.exception.php

ecco, un momento per usare l'ereditarietà, se vuoi puoi creare una classe con exception come parent, ed overloddare personalizzandola per la tua classe.
 
il print interno ad uno dei tuoi metodi. Invece di metterlo, lanci un eccezzione (in C++ si fa con throw, in python con raise, in php non so) e poi la gestisci. Per capirci, i vari messaggi di errori che vedi quando sbagli sono eccezzioni (errori). Guardati il link di orakool, che ti sta dicendo che potresti utilizzare l'ereditatrietà per creare errori personalizzati: infatti, gli errori (eccezzioni) alla fine sono oggetti.
 
ah capito...
quindi dovrei fare una cosa del genere...
creare una nuova classe errore ed estyendere la classe db cosi quando devo mettere errore faccio partire il metodo?
cosi?
poi nell metodo errore_db ci sara sempre la print asd!
 
Cosi non da errore
Codice:
    var $host;
    var $name;
    var $user;
    var $pass;
    var $connect;
    var $select;
    public function __construct($host,$name,$user,$pass){
        $this->host=$host;
        $this->name=$name;
        $this->user=$user;
        $this->pass=$pass;
    }
cosi da errore....
Codice:
    private $host;
    private $name;
    private $user;
    private $pass;
    private $connect;
    private $select;
    public function __construct($host,$name,$user,$pass){
        $this->host=$host;
        $this->name=$name;
        $this->user=$user;
        $this->pass=$pass;
    }
non capisco il perche....
:(:(
potreste farmelo capire voi se avete tempo'?
hop notato che se metto un nn ricordo come(public-private-protecte) mi da errore...
ma perche?
 
vincy6 ha detto:
poi nell metodo errore_db ci sara sempre la print asd!

parliamo arabo???? *nei metodi il print nn ci va, così come nn ci vanno echo etc*

tu devi lanciare l'errore, la sua gestione è affidata all'utente e a chi utilizza la classe, diamine, sei io volessi far sì che a tale errore lo script vada a printatarmi qualcosa di diverso? o richiami una qualche mia funzione?? dovrei modificare il tuo metodo, ereditanto e overloadando!!!!!

tu devi creare una classe a sé stante per l'errore, o eventualmente usare un errore che c'è già, visto che mi pari alle prime armi, usare la simpatica parola chiave throw. Probabilmente è già stato detto, ma leggi codesto link: http://docs.php.net/manual/en/language.exceptions.php

in pseudo codice la cosa sarebbe
Codice:
class miaeccezzione{
       /*definizione dell'eccezzione, come detto puoi anche usare un'eccezzione che c'è già */
}

class db {
   function maramao(param) {
        //codice
       if(errore) {
                 throw new miaeccezzione("maramao hai sbagliato");
       }
       //codice
}

$var=new db(maramao,maramao2);
try {
   $var->maramao(param);
}
catch (miaeccezzione $miao)
{
         print "mi piace il print, quindi ce lo metto, e ci aggiungo l'eccezzione".$miao->getMessage();
}

EDIT: mi sa che forse sono stato un po' brusco, però ti abbiamo detto e ripetuto link e di nn mettere print echo et simila in metodi/funzioni

vincy6 ha detto:
hop notato che se metto un nn ricordo come(public-private-protecte) mi da errore...
ma perche?

si chiamano restrittori di accesso, o una cosa del genere.

Allora, siccome non abbiamo la funzione crystal_ball(); [cit blacklight] se magari ci dici * gentilmente che errorre, potremmo esserti + utili...

anche perché, se mettendo private/protected è possibile sbagliare qualcosa, con public direi proprio di no...
 
Codice:
php -r "echo phpversion();" | curl -F 'sprunge=<-' http://sprunge.us
o
Codice:
php -i | grep PHP\ Version | cut -c 16- | curl -F 'sprunge=<-' http://sprunge.us
o
Codice:
php -i | grep PHP\ Version | sed "s/PHP Version => //" | curl -F 'sprunge=<-' http://sprunge.us
Result:
Codice:
 http://sprunge.us/Jaca

(E chi più ne ha più ne metta)
 
Beh.. non c'è tanto da avere conferme. Gli specificatori d'accesso nelle classi sono stati introdotti da php5 in poi. Se ha problemi mettendo gli specificiatori evidentemente non ha php5.
 
Stato
Discussione chiusa ad ulteriori risposte.