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.
<?php

class ORM {

public function getConnection()
{
global $connection;

return $connection;
}
}

?>

2. de connection class static maken

<?php

class ORM {

public function getConnection()
{
return Connection::get();
}
}

?>

Wat is een goede manier om de connection op te halen?
getters and setters, di, aop (google hierop, en je vind voldoende info), maar gebruik alsjeblieft geen globals in een class!
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:

<?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
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.

Reageren