Doe ik dit goed? Singleton pattern
Code (php)
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
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
<?php
class Database {
public static $dbCon;
private $dbArray;
private static $dbInstance;
public function __construct() { }
public function connect($dbArray) {
$this->dbArray = $dbArray;
try {
$dbInit = new PDO("mysql:host=".$this->dbArray['0'].";dbname=".$this->dbArray['3'], $this->dbArray['1'], $this->dbArray['2']);
$this->dbCon = $dbInit;
return true;
} catch (PDOException $e) {
return false;
}
}
public static function getInstance() {
if (empty(self::$dbInstance)) {
self::$dbInstance = new self;
return self::$dbInstance;
}
}
}
$db = Database::getInstance();
if ($db->connect(array("localhost", "root", "", "cdcol"))) {
echo "Connected";
} else {
echo "Not connected";
}
?>
class Database {
public static $dbCon;
private $dbArray;
private static $dbInstance;
public function __construct() { }
public function connect($dbArray) {
$this->dbArray = $dbArray;
try {
$dbInit = new PDO("mysql:host=".$this->dbArray['0'].";dbname=".$this->dbArray['3'], $this->dbArray['1'], $this->dbArray['2']);
$this->dbCon = $dbInit;
return true;
} catch (PDOException $e) {
return false;
}
}
public static function getInstance() {
if (empty(self::$dbInstance)) {
self::$dbInstance = new self;
return self::$dbInstance;
}
}
}
$db = Database::getInstance();
if ($db->connect(array("localhost", "root", "", "cdcol"))) {
echo "Connected";
} else {
echo "Not connected";
}
?>
Ik wil het gaan gebruiken voor een systeem(pje) waarin er meerdere libs komen vandaar dat ik als tip heb gekregen om het singleton pattern te gebruiken. Doe ik het zo op de goede manier? Alvast bedankt voor jullie reacties!
- Je hoeft geen empty te gebruiken, gewoon self::$dbInstance zelf evalueren werkt prima
- Je mag je contructor en copy-constructor (naja, __clone) private maken, zodat je onmogelijk meerdere instanties kan maken.
- En het kan korter >:)
Code (php)
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
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
<?php
class Database
{
static private $instance;
private function __construct()
{}
private function __clone()
{}
static public function getInstance()
{
return self::$instance
? self::$instance
: self::$instance = new self();
}
// of als je PHP 5.3 hebt
static public function getInstance()
{
return self::$instance ?: self::$instance = new self();
}
}
?>
class Database
{
static private $instance;
private function __construct()
{}
private function __clone()
{}
static public function getInstance()
{
return self::$instance
? self::$instance
: self::$instance = new self();
}
// of als je PHP 5.3 hebt
static public function getInstance()
{
return self::$instance ?: self::$instance = new self();
}
}
?>
@Jelmer dankjewel! Ben hier nieuw mee maar je script lijkt logisch dus ik ga me script gelijk even aanpassen.