2013-06-24 54 views
-1

我正在做一個簡單的PHP模板系統,但我得到一個錯誤,我無法解決,事情是佈局加載優秀,但很多次,不知道如何解決,這裏我的代碼PHP foreach覆蓋數組的價值

Class Template { 

private $var = array(); 

public function assign($key, $value) { 

    $this->vars[$key] = $value; 

} 

public function render($template_name) { 

    $path = $template_name.'.tpl'; 
    if (file_exists($path)) { 

     $content = file_get_contents($path); 

     foreach($this->vars as $display) { 


      $newcontent = str_replace(array_keys($this->vars, $display), $display, $content); 
      echo $newcontent; 

     } 

    } else { 

     exit('<h1>Load error</h1>'); 

    } 
} 

}

,輸出是

標題是:歡迎來到我的模板系統

貸[信貸]

標題是:[標題]

貸貸Alvaritos

正如你可以看到這是錯誤的,但不知道如何解決它。

+0

使用** SMARTY **不是更好嗎? – Robert

+2

我想創建自己的班級只是爲了練習。 –

+0

@Robert:如果你只是需要變量替換,沒有if/else /邏輯 - 不,不是真的 –

回答

2

你與strtr更好:

$content = file_get_contents($path); 
$new = strtr($content, $this->vars); 
print $new; 

str_replace()確實的內容替換鍵定義的順序。如果您有像array('a' => 1, 'aa' => 2)這樣的變量和像aa這樣的字符串,您將獲得11而不是2strtr()將在更換前按長度排序(最高優先),這樣就不會發生。

0

使用此:

foreach($this->vars as $key => $value) 
    $content = str_replace($key,$value,$content); 
echo $content;