Sprach-Cache-Einbindung von "include_once" auf "include" ändern

  • App
    WoltLab Suite Core

    Hallo,

    es gibt Probleme, wenn man mehrere Language-Objekte in einer Scriptlaufzeit benutzen möchte (siehe: https://technex.org/index.php?page=Thread&threadID=1136). Das kann z.B. der Fall sein, wenn eine statische Methode etwas erstellt und anschließend ein neues Objekt initialisiert und daraus eine objektgebundene Methode aufgerufen wird. Das Language-Objekt von Methode zu Methode zu übergeben, wäre eine notdürftige Möglichkeit.

    Da das neue Language-Objekt die benötigten Sprach-Variablen nicht beinhaltet, wird versucht, die entsprechende Sprach-Cache-Datei einzubinden, was auch mit einem true bestätigt wird. Da allerdings bereits in der statischen Methode ein Language-Objekt benutzt wurde, welches die gleiche Sprach-Cache-Datei eingebunden hat, verhindert PHP die erneute Einbindung und die Sprach-Variablen werden nicht "gefunden" und "roh" zurückgegeben.

    Eine Änderung von include_once auf include ist unbedenklich, weil bereits vorher die Abfrage erfolgt, ob die entsprechende(n) Sprach-Variablen vorhanden sind. Weiterhin würde eine erneute Einbindung nur zu einem Überschreiben der bereits gleichen Sprach-Variablen führen, was allerdings keine Auswirkung hat (dieser Vorgang sollte auch nur dann stattfinden, wenn eine nicht vorhandene Sprach-Variable versucht wird, zu laden). Möglich wäre natürlich auch zu prüfen, ob die Datei bereits im aktiven Language-Objekt eingebunden wurde, um tatsächliches "doppelladen" zu verhindern.

    • Offizieller Beitrag

    Das Problem besteht bei WCF 2.0 nicht mehr, da die Language-Objekte parallel von der LanguageFactory verwaltet werden und für sich isoliert laufen. Problematisch könnte es erst werden, wenn das selbe Language-Objekt doppelt verwendet wird, aber beim Zugriff auf die API ist das nicht möglich.

    Alexander Ebert
    Senior Developer WoltLab® GmbH

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!