Database interface klasse

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs zn Achternaam

Matthijs zn Achternaam

05/07/2014 03:43:28
Quote Anchor link
Ik besloot me vanavond te verdiepen in hoe je moet O.O.-programmeren in PHP. Na de shock verwerkt te hebben (ik programmeer meestal in C++ etc.) besloot ik om bovenop mysqli nog een interface te ontwikkelen zodat ik nog minder hoef te doen.

Nu vraag ik me eigenlijk het volgende af. Ik heb in mijn connect() methode een extra stuk code gebouwd zodat er opnieuw verbinding wordt gemaakt, wanneer de verbinding om de een of andere reden wegvalt. Om te kijken of de, eerder geopende, verbinding nog open is gebruik ik de mysqli::ping() methode. Wanneer blijkt dat de verbinding niet meer open is, start ik een nieuwe verbinding door middel van de mysql::real_connect() methode. Is dit een correcte manier van handelen?

Mijn code en wat test code staan hieronder:

Index.php (testprogramma):
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
<?php

require_once "dbInterface.php";

$database = Database::getInstance();
echo $database->isConnected() ? "Connected to DB!<br />" : "Not connected to DB!<br />";
$database->killConnection();

echo $database->connect() ? "Connected!<br />" : "Not connected!<br />";
echo $database->connect() ? "Connected!<br />" : "Not connected!<br />";
echo $database->isConnected() ? "Connected to DB!<br />" : "Not connected to DB!<br />";

$database->killConnection();
$database->killConnection();
echo $database->isConnected() ? "Connected to DB!<br />" : "Not connected to DB!<br />";

if(!$database->isConnected()) {
    $database->verbalizeErrors();
}


unset($database);

?>


dbInterface.php (de interface klasse):
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php

class Database {
    /* Private variables */
    private static $instance;
    private $connection;
    private $isConnected = false;
    
    private $host         = "localhost";
    private $database     = "PHPLearning";
    private $username     = "root";
    private $password    = "usbw";
    
    /* Public variables */
    
    /* Private methods */

    private function __construct() {
    }

    
    /* Public methods */    
    public static function getInstance() {
        if(Database::$instance == NULL) {
            Database::$instance = new Database();
        }

        
        return Database::$instance;
    }

    
    public function __destruct() {
        if($this->isConnected) {
            $this->killConnection();
        }

        
        echo "Adios my friend<br />";
    }

    
    public function connect() {
        if(!$this->isConnected) {
            $this->connection = @new mysqli($this->host, $this->username, $this->password, $this->database);
            echo "CONNECTING<br />";
        }
else if(!$this->connection->ping()) {
            $this->connection->real_connect($this->host, $this->username, $this->password, $this->database);
            echo "RECONNECTING<br />";
        }

        
        if(!$this->connection->connect_errno) {
            $this->isConnected = true;
        }

        
        return $this->isConnected;
    }

    
    public function killConnection() {
        if($this->isConnected) {
            $this->connection->close();
            $this->isConnected = false;
            echo "CONNECTION KILLED<br />";
        }
    }

    
    public function isConnected() {
        return $this->isConnected;
    }

    
    public function verbalizeErrors() {
        if($this->connection->connect_error) {
            die("Connect error ".$this->connection->connect_errno.": ".$this->connection->connect_error."!<br />");
        }
    }
}


?>


Om straks queries te kunnen uitvoeren zal ik later waarschijnlijk een aantal methoden moeten toevoegen die fungeren als doorgeefluiken (Sorry! :'[ ).

Ik sta open voor alle feedback die jullie kunnen bedenken, ook als het niet gerelateerd is aan mijn vraag!
 
PHP hulp

PHP hulp

29/04/2024 16:18:18
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/07/2014 13:08:26
Quote Anchor link
De meeste PHP scripts duren een fractie van een seconde. De kans dat een MySQL connectie wegvalt in die tijd is klein. Een goede foutafhandeling en rapportage is belangrijk. Maar om binnen een PHP script een wegvallende connectie proberen te herstellen gaat mij veel te ver.
 



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.