Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[php] altijd zelfde resource, classes

_arno_
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: Singleton pattern

Beantwoord deze vraag

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