我试图在PHP中创建一个简单的模板系统。我是PHP的新手,所以没什么大不了的。我有一些问题:
常规包含作品:
$variable = "test";
include("templates/news.html");
但这不会:
这表示$variable
未定义:
$variable = "test";
getTemplate("news");
功能:
function getTemplate($tpl) {
$file = "templates/$tpl.html";
if (file_exists($file))
return include($file);
return false;
}
news.html
<h1>php echo $variable</h1>
该函数有效并包含页面,但它不会写出变量
我将功能包含在所有页面的顶部。
提前致谢!
答案 0 :(得分:2)
使用extract函数,您可以从数组中定义不同的变量。
你可以这样:
$vars = array('var1' => "value1", 'var2' => "value2");
function getTemplate($tpl, $vars) {
$file = "templates/$tpl.html";
extract($vars, EXTR_SKIP)
if (file_exists($file))
return include($file);
return false;
}
getTemplate('news', $vars);
在模板中,您可以使用$ var1和$ var2。
答案 1 :(得分:1)
您正试图在函数中访问全局变量。
你必须在函数中声明变量global或者只使用:$ GLOBALS [“variable”]
function () {
global $variable;
etc..
}
答案 2 :(得分:0)
因为您在函数内部包含了该文件,所以该文件的内容不再属于全局范围。
您需要在功能的开头添加global $variable;
,或在news.html中使用echo $GLOBALS['variable'];
。
答案 3 :(得分:0)
我相信你的问题与变量范围有关。调用函数时,除了全局变量(在一秒钟内更多)或传递给函数的变量之外,您无法访问该函数之外的变量。 global
函数告诉PHP,您希望在函数中使用与父作用域中相同的变量。您还可以使用define
函数为脚本定义常量访问的常量。
使用大量的全局变量是非常不满意的,我建议将关联数组传递给函数,或者使用更面向对象的方法。
希望这有帮助, 雅各布
答案 4 :(得分:0)
您是否考虑过使用Smarty
如果你不想使用这个模板引擎,也许你应该检查它背后的一些想法。简而言之,它通过将变量赋值给对象来处理将变量赋值给模板。如果您将变量分配给模板对象,则可以在模板文件中使用它。