![]() |
[Erledigt][PHP] Findet Funktion nicht - und wenn, doppelt
Hi!
[Edit] ARGH - es ist wie üblich - 5 Minuten nachdem man gepostet hat, kommt einem die Idee, wie man es machen könnte. Zum einen, habe ich auf preg_replace_callback umgestellt, weil ich gelesen habe, dass das besser ist (das hat aber nichts am Fehler geändert) und dann habe ich die Funktion nestedif einfach aus der Klasse rausgezogen und *yihaa* es funktioniert. [/Edit] Sorry für den Titel, aber ich wüsste nicht, wie es besser beschreiben sollte. Das Problem tritt in meinem selbstgebauten Template-Parser auf - und zwar geht es konkret um das Finden und Ersetzen von <if>-Konstrukten. Diese sehen so aus (max. 1x verschachtelt)
Code:
Dazu habe ich mir folgenden Code gebastelt:
<if TRUE>
Konsequenz <if FALSE> Konsequenz_Innen <else> Alternative_Innen </if> Konsequenz <else> Alternative </if>
Code:
Das Ganze liegt in der Funktion parseTpl der Klasse template. Das Tolle ist - der Code funktioniert einwandfrei - solange ich nur einmal parseTpl aufrufe. Beim zweiten Mal meckert er (verständlicherweise), dass nestedif redeclared würde.
function nestedif($str) {
$str=preg_replace("#<if (?=TRUE>)TRUE>(.*)(?:<else>.*<\/if>|<\/if>)#Us","\\1",$str); return preg_replace("#<if (?=FALSE>)FALSE>(?:.*<else>(.*)<\/if>|.*<\/if>)#Us","\\1",$str); } $this->tpl = preg_replace("#<if\b[^>]*>(?:(?>[^<]+)|<(?!if\b[^>]*>))*?</if>#e", "nestedif('\\0')", $this->tpl); $this->tpl = preg_replace("#<if (?=TRUE>)TRUE>(.*)(?:<else>.*<\/if>|<\/if>)#Us","\\1",$this->tpl); $this->tpl = preg_replace("#<if (?=FALSE>)FALSE>(?:.*<else>(.*)<\/if>|.*<\/if>)#Us","\\1",$this->tpl); Also dachte ich, ich zieh die Funktion aus der Funktion raus und rufe, wie ich das sonst auch tue mit $this->nestedif auf - dann sagt er allerdings "Notice: Undefined property: Template::$nestedif" Ich vermute es hängt alles damit zusammen, dass es kein normaler Funktionsaufruf ist sondern eben durch den e-Modifier der regexp evaluiert wird. Weiß jemand, wie man das Ganze denn nun richtig macht? Liebe Grüße, Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz