contao/test — Issue #2706: Problem mit Singleton der Config-Klasse
Author: importer
Created: 2011-11-29 10:09:31+00:00
State: open
Labels: Defect, framework

Die aktuelle Umsetzung des Singleton in der Config Klasse kann unter bestimmten Umständen versagen und zur Initialisierung von zwei Instanzen führen.

Beschreibung:
Wird z.B. bei einer Erweiterung bereits in der spezifischen config.php eine Instanz von File benötigt und gleichzeitig der smhextended Hook verwendet, dann wird aus der Files::getInstance() heraus die Config ein zweites Mal erzeugt. Damit werden die Globalen Variablen teilweise doppelt, bzw. als Array angelegt, was in der Folge zu verrückten Fehlermeldungen führt.

Erläuterung:
Die Config::getInstance() prüft, ob die self::$objInstance noch kein Objekt ist und ruft erzeugt eine neue Instanz der Config. Innerhalb des Config::__construct() werden die config.php der einzelnen Module durchlaufen und dabei dann die Files Klasse per Files::getInstance() initialisiert.
Diese ruft dann ihrerseits die Config::getInstance() wieder auf.
Da aber der Konstruktor von Config noch nicht abgearbeitet wurde, ist also die self::$objInstance noch nicht definiert (wird erst nach vollständiger Abarbeitung des Konstruktors in der Config::getInstance() gesetzt).
Das Problem tritt also immer auf, wenn eine Modulspezifische config.php irgendwo die Config::getInstance() wieder aufruft.

Lösungsvorschlag:
In Config::__construct() als erste Zeile folgendes einfügen:

```
self::$objInstance = $this;
```

Damit ist gewährleistet, dass self::$objInstance sofort initialisiert wurde und geschachtelte Aufrufe von Config::getInstance() erzeugen keine zweite Instanz von Config mehr.

In der Config::getInstance() kann dann die Zeile

```
self::$objInstance = new Config();
```

durch

```
new Config();
```

ersetzt werden, muss aber nicht.

Diese Änderung hat keinen Einfluss auf den Aufruf und ist für den Rest von Contao und deren Module transparent.

Dieses Problem hat nichts mit Ticket #2695 zu tun!

Bei den anderen Singleton Klassen habe ich noch keine Konstellation gefunden, bei der eine Änderung wie beschrieben nötig wäre.

[Download the attachments](http://www.contao.org/tl_files/tickets/2706.zip "Download the attachments of this ticket")

--- _Originally created by N.Parker on November 30th, 2010, at 11:46am (ID 2706)_