SQL verbinding gebruiken binnen class
Als ik nu een andere class heb welke ook verbinding moet kunnen maken dan laat ik die de mysqli_database extenden zodat die class ook verbinding kan maken. Alleen op deze manier wordt er bij iedere class die ik op die manier laat werken een nieuwe verbinding gemaakt. Dit wil ik niet.
Is het bijvoorbeeld mogelijk om het volgende te doen:
$db = new mysql_database;
$menu = new menu($db);
Zodat de class menu gebruik maakt van de huidige verbinding?
Gewijzigd op 19/04/2016 15:37:43 door Sander Z
service locator tussen kunnen zetten, zodat de databaseverbinding een gedeelde service wordt.
>> Als ik nu een andere class heb welke ook verbinding moet kunnen maken dan laat ik die de mysqli_database extenden zodat die class ook verbinding kan maken.
Ik denk dat je bedoelt dat je de databaseverbinding doorgeeft met dependency injection (zoals in je voorbeeld), want elke klasse die de database gebruikt de databaseverbinding laten extenden, is geen goed plan.
Je zou er een >> Als ik nu een andere class heb welke ook verbinding moet kunnen maken dan laat ik die de mysqli_database extenden zodat die class ook verbinding kan maken.
Ik denk dat je bedoelt dat je de databaseverbinding doorgeeft met dependency injection (zoals in je voorbeeld), want elke klasse die de database gebruikt de databaseverbinding laten extenden, is geen goed plan.
Quote:
Dit wil ik niet.
En dat is meestal ook niet logisch waarschijnlijk. Een menu is geen (specifieker) voortborduursel van een database. Het kan wel zo zijn dat een menu een informatiebron (zoals een database) nodig heeft om zijn taken te kunnen verrichten. Maar dat maakt een menu nog geen verlengstuk van een database.
Het bovenstaande is waarschijnlijk een goed idee: je geeft het menu-object de informatie (mee) die deze nodig heeft om zijn taak uit te kunnen voeren (volgens mij staat dit principe ook bekend als dependency injection). Idealiter hoef je maar één keer een mysql_database object te creëren binnen je code. Daarnaast is er sowieso een optimalisatie onder de motorkap waarbij bestaande connecties worden hergebruikt als de connectie-parameters in de verschillende aanroepen van een connect-functie of -methode hetzelfde zijn.
Bedankt voor de info. Ik ga me er eens even in verdiepen!