Connection op halen in een class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rob van der W

Rob van der W

14/12/2013 23:34:52
Quote Anchor link
Ik ben bezig met een soort klein eigen frameworkje te schrijven, puur en alleen om het leren. Nu zit ik met het volgende probleem waarbij ik niet weet hoe ik dit het beste kan oplossen.

Ik heb een soort van kleine ORM gemaakt en die moet de connectie met de database ergens vandaan halen.

Zelf kon ik de volgende manieren bedenken (die ook werken maar volgens mijn niet de bedoeling zijn):

1. gebruik maken van een global.
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

class ORM {
    
    public function getConnection()
    {

        global $connection;
        
        return $connection;
    }
}


?>


2. de connection class static maken

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

class ORM {
    
    public function getConnection()
    {

        return Connection::get();
    }
}


?>


Wat is een goede manier om de connection op te halen?
 
PHP hulp

PHP hulp

20/04/2024 05:40:47
 
Local Dev

Local Dev

14/12/2013 23:53:03
Quote Anchor link
getters and setters, di, aop (google hierop, en je vind voldoende info), maar gebruik alsjeblieft geen globals in een class!
Gewijzigd op 15/12/2013 00:00:23 door Local Dev
 
Rob van der W

Rob van der W

15/12/2013 00:01:23
Quote Anchor link
Dat ik geen globals moet gebruiken weet ik. Het kwam alleen als eerste in me op. Nog nooit gehoord van AOP zal er eens op google :p

Het probleem is een beetje dat de ORM altijd de parent class zal zijn. Bijvoorbeeld:

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

class User extends ORM {}

// En dan wil ik zoiets kunnen doen
$user = (new User())->find(1);
?>


Om dan elke keer de db verbinding mee te sturen is niet erg lekker werken. En als je in frameworks kijkt gebeurt dat ook nooit. Maar hoe ze het daar wel doen, heb ik nog niet kunnen ontdekken :D
Gewijzigd op 15/12/2013 00:03:54 door Rob van der W
 
Wouter J

Wouter J

15/12/2013 00:28:20
Quote Anchor link
Als je een klasse wilt gebruiken in een andere klasse moet ie worden geïnjecteerd, dat is gewoon zoals het werkt.

En dat dat niet gewenst is één van de minst belangrijke redenen om een user niet ORM te laten extenden. Een ORM is een Object Relation Manager. Dus een tussenpersoon tussen het Object en de Database (Relation). Zoals het altijd met tussenpersonen werkt mag een Object dus niet van de Database weten en andersom. Gebruik dus liever het datamapper design pattern, of gebruik models, of iets in die trant, maar geen Active Record.
 



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.