Hallo zusammen,
ich schreibe gerade aus Interesse eine "Template Engine".
Nur habe ich gerade ein Problem mit, ich tippe mal den Regular Expressions, der Rekursiven (Verschachtelten) Überprüfung der If-Conditions, diese greifen mehr oder weniger gar nicht.
Anbei mal die essentiel wichtigen Methoden für diese Aktion.
PHP-Code:
protected function parseIfConditions()
{
$sPattern = '#if \(\"(.*?)\" (==|!=|<|>|<=|>={1,2}) \"(.*?)\"\) {(.*?)([^\\\])}#is';
return preg_replace_callback($sPattern, array($this, 'parseIfCallback'), $this->sComputedTemplate);
}
protected function parseIfCallback($aResults)
{
if ($this->ConditionHelper($aResults)) {
$this->sComputedTemplate = str_replace($aResults[0], $aResults[4], $this->sComputedTemplate);
} else {
$this->sComputedTemplate = str_replace($aResults[0], '', $this->sComputedTemplate);
}
}
Die Methode ConditionHelper ist eigentlich nur für folgendes zuständig:
PHP-Code:
protected function ConditionHelper($aResults)
{
if ($aResults[2] == "==")
$bResult = ($aResults[1] == $aResults[3] ? true : false);
if ($aResults[2] == "!=")
$bResult = ($aResults[1] != $aResults[3] ? true : false);
if ($aResults[2] == ">=")
$bResult = ($aResults[1] >= $aResults[3] ? true : false);
if ($aResults[2] == "<=")
$bResult = ($aResults[1] <= $aResults[3] ? true : false);
if ($aResults[2] == ">")
$bResult = ($aResults[1] > $aResults[3] ? true : false);
if ($aResults[2] == "<")
$bResult = ($aResults[1] < $aResults[3] ? true : false);
return $bResult;
}
Wenn ich die If-Conditions normal schreibe, funktioniert das ganze.
Gibs da evtl. einen Trick?
LG Toby