Me classes de database laten gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jelle -

Jelle -

04/06/2010 15:10:01
Quote Anchor link
Ik heb een hoop classes die allemaal wat regellen. Maar velen hebben een database connectie nodig dus moeten ze gebruik maken van de database class. Maar hoe doe je dit op een goeie manier? Als ik iedereen maar de database class geef dan hangt het teveel aan me database class en kan ik daar dus nooit meer wat aan aanpassen
 
PHP hulp

PHP hulp

20/04/2024 13:37:01
 
Jurgen Meijer

Jurgen Meijer

07/06/2010 10:32:01
Quote Anchor link
Wat je kan doen is er een singleton object van maken. en dan in je class:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$database
= &singleton::getInstance('database');

$database->query(...);

?>
 
Jan geen

Jan geen

07/06/2010 11:17:53
Quote Anchor link
Als je nog meer singleton instanties hebt kan je ook kijken naar het registry pattern
 
Jurgen Meijer

Jurgen Meijer

07/06/2010 11:59:20
Quote Anchor link
Ja, registry is in principe een verzameling van meerdere instanties. Erg handig voor klassen die je vaak gebruikt zoals Database, user, smarty noem maar op.
 
Andreas Warnaar

Andreas Warnaar

07/06/2010 14:21:59
Quote Anchor link
Jurgen Meijer op 07/06/2010 10:32:01:
Wat je kan doen is er een singleton object van maken. en dan in je class:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$database
= &singleton::getInstance('database');

$database->query(...);

?>


Ik vindt deze notatie wel interessant.
Waarom niet gewoon DataBase::getInstance();
 
Synaps Framework

Synaps Framework

07/06/2010 16:44:54
Quote Anchor link
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
<?php
 class Database extends PDO {
 
    private static $_oInstance;
    
    const MYSQL = 'mysql';
    const PGSQL = 'pgsql';
    
    private $aAuthData = array();
    private $sEngine = 'mysql';
    
        public function __construct($Engine, $aAuthData) {
            $pdo =     parent::__construct($Engine.':host='.$aAuthData['Host'].';dbname='.$aAuthData['Database'],$aAuthData['Username'],$aAuthData['Password']);
                    parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        return $pdo;
        }

        
        
        public static function initialise($sEngine = 'mysql', $aAuth = array() ) {
            if(!empty($sEngine)) {
                if (is_null(self::$_oInstance)) {
                    if(is_array($aAuth) && count($aAuth) > 0) {
                        if(array_key_exists('Host', $aAuth) && array_key_exists('Username', $aAuth) && array_key_exists('Password', $aAuth) && array_key_exists('Database', $aAuth)) {
                            $c = __CLASS__;
                                self::$_oInstance = new $c($sEngine, $aAuth);
                                    return self::$_oInstance;
                        }
else {
                            throw new DatabaseException('Authorisation array is incomplete for "'.__FUNCTION__.'"', DatabaseException::E_USER_ERROR);
                        }
                    }
else {
                        throw new DatabaseException('Wrong or no parameter given for "'.__FUNCTION__.'"', DatabaseException::E_USER_ERROR);
                    }    
                }
else {
                    return self::$_oInstance;
                }
            }
else {
                throw new DatabaseException('Database needs Engine', DatabaseException::E_CORE_WARNING);
            }
        }

        
        public static function pdo() {
            if(!is_null(self::$_oInstance)) {
                return self::$_oInstance;
            }
else {
                throw new DatabaseException('PDO needs initialising first', DatabaseException::E_USER_ERROR);
            }
        }

        
        
        public function __clone() {

        }

        
        
        public function __destruct() {

        }
 }

 
 ?>


Zoiets dan?
 
- Jim  -

- Jim -

07/06/2010 16:50:35
Quote Anchor link
Het is geheel afhankelijk hoe de opbouw van je structuur is.
Heb je Objecten die vanalles zelf regelen?
Of maak je gebruik van DAO's?
Maak je gebruik van Controllers?

Een singleton is een mogelijke oplossing. Houd er dan wel rekening mee dat als je op een gegeven moment veel bezoekers op je pagina krijgt dat je wellicht niet alle requests over die ene verbinding kunt krijgen...
 
Jurgen Meijer

Jurgen Meijer

08/06/2010 13:51:54
Quote Anchor link
Andreas Warnaar op 07/06/2010 14:21:59:
Jurgen Meijer op 07/06/2010 10:32:01:
Wat je kan doen is er een singleton object van maken. en dan in je class:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$database
= &singleton::getInstance('database');

$database->query(...);

?>


Heb je opzich wel gelijk in, mijn voorbeeld lijkt in die zin meer op het registry pattern.


Ik vindt deze notatie wel interessant.
Waarom niet gewoon DataBase::getInstance();
 



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.