Tpl系统实际上并没有将params解析为值

时间:2014-08-14 10:46:07

标签: php parameters

因此,对于我的毕业设计项目,我选择制作自己的模板引擎,而不是使用像雨或聪明的东西。现在我在params部分,但每次运行脚本时,它都没有实际解析变量......

看一下我的参数解析函数:

public function parseParameters()
{
    if ( isset ( $this->parameter ) )
    {
        foreach ($this->parameter as $key => $value) {
            str_replace( $this->content, '{' . $key . '}', $value );
        }
    }

    if ( isset ( $this->langParameters ) )
    {
        foreach ($this->langParameters as $key => $value) {
            str_replace( $this->content, '{$' . $key . '}', $value );
        }
    }

    if ( isset ( $this->templateData ) )
    {
        foreach ($this->templateData as $key => $value) {
            str_replace( $this->content, '{#' . $key . '}', $value );
        }
    }

    echo $this->content;
}

我在旧的foreach loop解决方案中选择了array_keys。但它显然不起作用......

更多信息:

是的,$this->content变量已定义。

这是我设置参数的方式:

public function createParameter( $key, $value )
{
    $this->parameter[ $key ] = $value;
}

其他两种类型的参数完全相同,只有不同的名称。

如果您需要更多代码,请说明。

感谢。

2 个答案:

答案 0 :(得分:0)

$ this->内容是什么?是要用"{$key}"替换$value的字符串?那应该是最后一个论点。 AND str_replace函数仅返回替换的字符串,不会在第三个参数中更改。所以:

 $this->content = str_replace('{' . $key . '}', $value,  $this->content );

文档: PHP: str_replace

答案 1 :(得分:-1)

我使用类似的模板引擎,我遇到(一段时间)类似的问题......你确定要替换的值是字符串吗?如果没有把它们作为字符串。

if ( isset ( $this->parameter ) )
{
    foreach ($this->parameter as $key => $value) {
        str_replace('{' . $key . '}', (string)$value,  $this->content);
    }
}

希望它有所帮助!