Tach!
Crockford, so wie ich ihn verstehe, versucht fehlerträchtigen Code durch idiotensicheren Code zu ersetzen. So ganz hat sich mir das mit ob_start() und ob_get_clean() noch nicht erschlossen. Finde dazu auch im Manual keinen "kritischen" Hinweis:
Das ist per se fehlerträchtig, weil Ausgabepuffer globaler Status (global state) sind. Man versucht sowas zu vermeiden, weil man über lokale Dinge einen viel besseren Überblick behalten kann als zu beachten, was alles Einfluss auf das globale Ding haben kann und was das globale Ding beeinflusst.
http://php.net/manual/de/function.ob-start.php
"Ausgabepuffer können verschachtelt werden, [...]
Verschachteln, ja. Aber sie sind nicht unabhängig voneinander verwendbar und man kann sie auch nicht gezielt ansprechen. Man sollte sie nur verwenden, wenn es gar nicht anders geht, aber nicht als generelle Alternative zu Stringverkettung oder anderen Dingen, die speziell für die zu erledigende Aufgabe vorgesehen sind. Ausgabepuffer sind zum Puffern der Ausgabe vorgesehen, nicht für das Verknüpfen von Strings, die gar nicht ausgegeben werden sollen. Crockford möchte sicher auch, dass man aus einem Konstrukt die Intention dahinter leicht erkennen kann. Bei einer Zweckentfremdung sieht man das eher nicht.
dedlfix.