Moin Blaubart,
Ich fürchte, aus diesen Codeauszügen ist die Ursache deines Problems nicht zu ersehen. Z. B. kann ich nicht erkennen, an welcher Stelle "der entscheidende Codeschnipsel" überhaupt ins Spiel kommt.
Ich hatte diese Frage befürchtet und kann es nur grob umreissen.
Der "entscheidende" Code-Schnipsel ist Teil einer Methode im Objekt "system", das als CMS-Framework dienen soll (d.h. Kapselung aller nicht inhalts-spezifischen Funktionen).
Dort wird IRGENDWANN - und dieses "irgendwann" war der entscheidende Knackpunkt - der DocType der Ausgabe festgelegt und die betroffenen Child-Objekte entsprechend initialisiert (z.B. $system->html['doctype'] = array(); ).
Das Problem lag am Timing. Der Aufruf für die Initialisierung erfolgt erst nach dem includen des Files, kurz vor dem Aufruf der Funktion content(). Der includierte File aber ist das den eigentlichen Inhalt und Output erzeugende Modul/Subsystem.
In meiner Variante ohne OB wurde innerhalb der Funktion includiert, und daher erst beim Aufruf der Funktion content() ausgeführt.
In der Variante mit OB wurde er zugleich includiert UND ausgeführt, aber die für den Output relevanten Daten (z.B. DocType-abhängige Parameter) sind da noch lange nicht initialisiert (gewesen).
BLÖDER Fehler. GANZ blöder Fehler. *hmpf*
$result .= empty($GLOBALS['tag_list_unclosed'][$p_tag]) ? _D13_TAG_OPEN_END : $this->system->html['doctype']['nonclosed'];
Deiner Aussage nach ist _D13_TAG_OPEN_END ein String, html['doctype']['nonclosed'] jedoch ein Array. Es wird also je nach Ausgang der Fallunterscheidung entweder das Zeichen '>' oder die Zeichenkette 'Array' an $result drangehängt.
Dein Einwand ist richtig, aber ich hatte die Situation unglücklich formuliert beschrieben. $this->system->html['doctype']['nonclosed'] ist natürlich nur ein String als Element in einem Array. Insofern war das nicht die URsache.
Auf die Lösung kam ich, als ich gestern abend noch mit Frau und Schwiegereltern türkisch essen war - und über diesen Satz von Dir nachdenken musste:
An welcher Stelle überprüfst du das? In der letzten Zeile con content()?
Insofern Dank an Dich, dass Du Dir die Mühe gemacht hast, Dir den Code überhaupt anzuschauen.
(...und frag mich bitte nicht, wie ich beim türkisch Essen auf die Idee komme, über solche Dinge nachzudenken ;-) Ich weiss es schlicht weg nicht. Der Gedanke war plötzlich einfach da.)
Gruß, Rüdiger