2016-02-27 48 views
2

我有這個功能的類:創建需要()別名功能

public function loadTemplate($template) 
{ 
    return require "templates/$template.php"; 
} 

這很好,但我有一個問題的。

比方說,我有這樣的代碼:

require('class.php');  
$class = new ClassName; // ClassName is the class which contains the function loadTemplate() 
$name = 'Jerry'; 
$class->loadTemplate('myname'); 

而且「myname.php」是:

<?php 
echo "My name is $name."; 

在這種情況下,我得到一個錯誤,因爲「myname.php」實際上包含在課程文件中,因此$ name未定義。

我該如何解決這個問題?

+0

老實說,我建議你不要這樣設計你的應用程序。或者,您需要將「變量」傳遞給loadTemplate方法一些方法,然後讓它們以某種方式傳遞給$模板。 – Daniel

+0

你認爲什麼是更好的解決方案? –

+1

「使用,分析和從現有的經過驗證的模板系統學習」將是一種選擇。 – VolkerK

回答

1

沒有討論這是否是最好的設計,這裏是你如何做到這一點。

public function loadTemplate($template, $vars) 
{ 
    extract($vars); 
    ob_start(); 
    require "templates/$template.php"; 
    $viewContent = ob_get_contents(); 
    ob_get_clean(); 
    return $viewContent; 
} 

傳遞您的變量作爲關聯數組:

$vars = ['name' => 'Jerry'] 

然後將它輸出:

echo $class->loadTemplate('myname', $vars); 

這樣做是什麼,它從數組創建變量並加載視圖,但是使用「ob_」函數,我們捕獲輸出緩衝區,然後在需要時回顯。

如果您嘗試使用require方法,您可能無需使用ob_即可脫身。我會說給它一個去使用你喜歡的。