Tips voor mijn eerste class (database)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom aan t Goor

Tom aan t Goor

29/08/2013 11:11:08
Quote Anchor link
Hoi,

Dit is mijn eerste PHP class.
Ik ben (ook) begonnen met een database class.

Ik ben nieuwsgierig naar jullie mening en hoor graag tips.

Hier mijn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
class Db{
    private $server;
    private $username;
    private $password;
    private $database;
    private $connection;
    
    public function setVars($server, $username, $password, $database){
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->database = $database;
    }

    
    public function dbConnectie(){
        if(!$this->connection = mysql_connect($this->server,$this->username,$this->password)){
            echo 'Kon niet verbinden met de database 1';
        }

        
        if(!mysql_select_db($this->database, $this->connection)){
            echo 'Kon niet verbinden met de database 2';
        }
    }

    
    public function query($sql){
        if(!mysql_query($sql)){
            include 'mysql_foutmelding.php';
            return false;
        }
else{
            return true;
        }
    }

    
    public function sluitConnectie(){
        return mysql_close($this->connection);
    }
}

    
$db = new Db();
$db->setVars("localhost", "gebruikersnaam", "password", "database");
$db->dbConnectie();

if($db->query("UPDATE testtabel SET naam='Bob' WHERE id='1'")){
    echo 'De naam is aangepast!';
}


$db->sluitConnectie();[/code]
Gewijzigd op 29/08/2013 11:13:01 door Tom aan t Goor
 
PHP hulp

PHP hulp

23/11/2020 22:55:15
 
Bernhard Flokstra

Bernhard Flokstra

29/08/2013 11:41:10
Quote Anchor link
Allereerst, ga niet echoen in een class. Return alle text de je wil tonen.
Wat je bij setVars() doet is leuk, maar het past beter in een contructor. Doe je dit niet in de contructor, maak dan voor elke property een aparte setter.

Toevoeging op 29/08/2013 11:43:09:

Verder, de foutmelding bij de dbConnectie() methode is ook niet juist he. De eerste foutmelding zou moeten zijn "Kon geen verbinding maken met de database server" aangezien dat is wat je probeert.

Verder, stap over op mysqli. mysql word binnen niet al te lange tijd namelijk vervangen door mysqli.
 
Tom aan t Goor

Tom aan t Goor

29/08/2013 12:02:18
Quote Anchor link
Bedankt Bernhard voor je reactie.

Ik heb er nu dit van gemaakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
class Db{
    private $server;
    private $username;
    private $password;
    private $database;
    private $connection;
    
    public function __construct($server, $username, $password, $database){
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->database = $database;
    }

    
    public function dbConnectie(){
        $errortekst = "";
        if(!$this->connection = mysqli_connect($this->server,$this->username,$this->password)){
            $errortekst .= 'Kon niet verbinden met de database server';
        }

        
        if(!mysqli_select_db($this->connection, $this->database)){
            $errortekst .= 'Kon niet verbinden met de database';
        }

        return $errortekst;
    }

    
    public function query($sql){
        if(!mysqli_query($this->connection, $sql)){
            include 'mysql_foutmelding.php';
            return false;
        }
else{
            return true;
        }
    }

    
    public function sluitConnectie(){
        return mysqli_close($this->connection);
    }
}

    
$db = new Db("localhost", "gebruikersnaam", "password", "database");
echo $db->dbConnectie();

if($db->query("UPDATE testtabel SET naam='Bob' WHERE id='1'")){
    echo 'De naam is aangepast!';
}


$db->sluitConnectie();[/code]
Gewijzigd op 29/08/2013 12:04:44 door Tom aan t Goor
 
- Raoul -

- Raoul -

29/08/2013 12:17:31
Quote Anchor link
Gooi een exception ipv de error te returnen.

Verder zou ik de dbconnectie automatisch in je constructor aanmaken.

En gebruik engelse namen voor je methods.
 
Bernhard Flokstra

Bernhard Flokstra

29/08/2013 12:21:55
Quote Anchor link
Ik zou de errormeldingen (als je dan toch met errors wil werken in plaats van exceptions) direct returnen en niet eerst aan een variabele toevoegen. Heeft niet echt veel meerwaarde namelijk. Zie onderstaande.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
public function dbConnectie(){
        if(!$this->connection = mysqli_connect($this->server,$this->username,$this->password)){
            return 'Kon niet verbinden met de database server';
        }

        
        if(!mysqli_select_db($this->connection, $this->database)){
            return 'Kon niet verbinden met de database';
        }

return false;
    }

?>

Gewijzigd op 29/08/2013 12:22:34 door Bernhard Flokstra
 
Tom aan t Goor

Tom aan t Goor

29/08/2013 13:03:43
Quote Anchor link
-Raoul-, de dbConnectie wil ik liever niet in de constructor aanmaken, maar dit is mijn persoonlijke voorkeur.
En aangezien ik nooit heb gewerkt met Exceptions, en dus ook niet precies weet wat dit is, zal ik me hier eerst meer in verdiepen.

Bernhard, ik ga toch liever voor de variabele, dat komt omdat je dan in 1 keer kan zien wat er wel en niet werkt.
 
Erwin H

Erwin H

29/08/2013 13:09:08
Quote Anchor link
Uhm, als je geen connectie kan maken met je database, kan je uiteraard ook geen database selecteren. Als het eerste dus fout gaat weet je automatisch dus ook dat het tweede fout zal gaan. Beetje nutteloos om het tweede dus nog te doen....
 
Bernhard Flokstra

Bernhard Flokstra

29/08/2013 13:16:44
Quote Anchor link
Tom: Als je geen verbinding kan maken met de database server is het onmogelijk om wel de database te selecteren. Het is dus totaal onnodig om de database controle te doen als de verbinding vaalt.
 
Tom aan t Goor

Tom aan t Goor

29/08/2013 13:18:14
Quote Anchor link
Sorry, hier had ik even niet aan gedacht.

Ik heb het veranderd.
 
Bernhard Flokstra

Bernhard Flokstra

29/08/2013 14:00:12
Quote Anchor link
Top. Nu rest mij nog een vraag. Waarom wil je dbconnectie niet in de constructor uitvoeren? Het je daar een reden voor? Is er een reden waarbij je de Db class moet instancieren zonder dat er een database verbinding tot stand komt?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.