Vraag & Antwoord

Webprogrammeren & scripting

[php] altijd zelfde resource, classes

4 antwoorden
  • Geachte Heren, Ik heb een mysql database class. Alleen nu heb ik een probleem, ik wil deze database class in meerdere van mijn andere classes gebruiken. Nu is dat niet z'n probleem, alleen wil ik ook dat ik uiteraard maar 1 connectie naar de database maak. Nu heb ik naar mijn kennis 2 opties: 1) het gebruik van $GLOBALS, hierin store ik mijn resource en andere class variablen. Deze worden bij construct en destruct geset. Dit betekend dat ik in class dus db gewoon altijd kan gebruiken, voorbeeld class: [code:1:a42a1a4e5e] class X { private $db; public function __construct() { $this->db = new MySQL(); } } class Y { private $db; public function __construct() { $this->db = new MySQL(); } } [/code:1:a42a1a4e5e] en dat in elke class te kunnen gebruiken. 2) Ik geef bij elke class die ik aanroep de mysql class mee als reference. dus: [code:1:a42a1a4e5e] $db = new MySQL(); $class = new X($db); class X { private $db; public function __construct(&$db) { $this->db = &$db; } } [/code:1:a42a1a4e5e] Ik heb nu beide mogelijkheden gebruikt, ik vind persoonlijk optie 1 makkelijker werken. Maar dit moet naar mijn idee beter kunnen. Zijn er meerdere opties? Of is 1 van deze opties beter uit te werken? Vriendelijk bedankt, Arno. Excuses voor de brakke titel, kan niet echt een betere verzinnen.
  • Waarom wil je maar 1 connectie naar de database maken? Heeft MySQL geen connectionpool? Ik zou overigens gewoon voor optie 1 gaan. Ik zie niet echt waarom dat beter zou kunnen/moeten.
  • Over het gehele script heb je eigenlijk maar 1 connectie naar 1 database nodig? Bij het aanroepen van de mysql class krijg je dus meerdere resources, of wel meerdere connecties. En dit is niet nodig, aangezien je alleen maar requests doet op dezelfde database, waarom dus meerdere connecties maken. Het doel is om dus zo eenvoudig en efficient mogelijk 1 connectie naar de database te hebben, welke in elke class eenvoudig aangeroepen kan worden. Ik zit niet zo in databases, wat is precies een connectionpool. En omdat ik graag de beste weg naar rome vind, vraag ik het hier. ;)
  • De OO-manier zou een Singleton object zijn. Dit kan ook in PHP (liefst PHP5, want daar is OO beter ondersteund). Wikipedia geeft deze implementatie: [code:1:d493c45a84]<?php class Singleton { // object instance private static $instance; private function __construct() {} private function __clone() {} public static function getInstance() { if (self::$instance === null) { self::$instance = new Singleton(); } return self::$instance; } } ?>[/code:1:d493c45a84] Je maakt gewoon 1 singleton database class. Vervolgens kun je vanuit elk willekeurig punt Database.getInstance() aanroepen die vervolgens je Database object teruggeeft. Bron wikipedia: [url=http://en.wikipedia.org/wiki/Singleton_pattern]Singleton pattern[/url]

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.