PHP vergisst Werte von Variablen

Ich hatte es heute zum zweiten Mal in meiner PHP-Laufbahn, dass PHP Variablenwerte nachweislich und reproduzierbar vergisst. Festgestellt habe ich es in Contao 2.11.2 und 2.11.5 (Version 2.10.4 scheint davon nicht betroffen, in Versionen darunter habe ich nicht geprüft).  Wer es bei sich einmal testen möchte, möge ein Nachrichtenarchiv erstellen und dann einen Nachrichtenleser oder eine Nachrichtenliste als Modul in einen Artikel einbinden. Es werden keine in den erstellten Modulen getätigten Experten-Einstellungen übernommen. Die Experten-Einstellungen die man am Ort der Einbindung tätigt funktionieren jedoch tadellos. Ebenso funktioniert es bei anderen Module, wie zum Beispiel der Artikelliste. Nach 1.5h Suche habe ich den „Fehler“ in der Module.php ausgemacht.

Im Konstruktor werden die Werte über:

$this->cssID = deserialize($objModule->cssID, true);

geladen und nur knapp 70 Zeilen später in der Funktion generate() dem Template zugewiesen.

$this->Template->cssID = ($this->cssID[0] != '') ? ' id="' . $this->cssID[0] . '"' : '';
$this->Template->class = trim('mod_' . $this->type . ' ' . $this->cssID[1]);

Der Irrsinn an dem ganzen: Benennt man $this->cssID zum Beispiel in $this->css oder $this->cssIDaw um funktioniert es wieder. Ein Umbenennen in $this->cssIDs reicht aber zum Beispiel nicht.

Nun könnte man behaupten, dass die Variable einfach in einer anderen Klasse überschrieben wird. Das erklärt aber nicht, warum dann ein Umbenennen der Variable nur unter bestimmten Umständen funktioniert. Außerdem habe ich die gesamte Contao-Installation nach „->cssID“ durchsucht und fand keine relevanten Treffer, die dieses Phänomen erklären könnten.

Und als sei das noch nicht genug, wird es ganz verrückt wenn man folgendes versucht:

in __construct()

$this->cssID = deserialize($objModule->cssID, true);
$this->cssIds = $this->cssID

in generate()

$this->cssId = $this->cssIDs
$this->Template->cssID = ($this->cssID[0] != '') ? ' id="' . $this->cssID[0] . '"' : '';
$this->Template->class = trim('mod_' . $this->type . ' ' . $this->cssID[1]);

Et voilà: Es funktioniert.

Erstaunlich dabei: Sucht man nach diesem Phänomen im Netz wird man nur sehr schwer fündig. Da ich dies nun aber schon zum zweiten Mal habe und das ganze in zwei verschiedenen Contao-Installationen auf jeweils zwei verschiedenen Servern mit verschiedenen PHP Versionen verifizieren konnte, kann man quasi kaum noch von einem Zufall sprechen.