我的班级基本上是这样的:
class App {
public function newTemplate($filename, $vars=array())
{
$smarty = new Smarty;
$smarty->compile_dir = $this->template_compile_path;
if(count($vars) > 0)
{
foreach($vars as $v_key => $v_name)
{
$smarty->assign($v_key, $v_name);
}
}
return $smarty;
}
}
然而,当我创建一个'App'实例时,对$ smarty的引用似乎被打破了,因为每次调用membermethods似乎都没有做任何事情:
$app = new App;
$tpl = $app->newTemplate("index.tmpl");
$tpl->assign("foo", "bar"); // {$foo} does not appear with "bar" in the template
现在我想知道为什么?当然我试着使用引用:
...
public function &newTemplate()
...
......但这不起作用。变量引用似乎也不起作用:
...
$tpl = &$app->newTemplate("index.tmpl");
...
这是什么导致PHP不返回正确的引用?非常感谢帮助!
答案 0 :(得分:0)
你正在使用$ this-> template_compile_path;初始化Smarty。你有没有初步化?另外一点是你设置PHP来显示错误吗?你看过你的网络服务器错误日志了吗?
如果您对函数返回的内容有疑问,请在结果上使用print_r。
答案 1 :(得分:0)
解决方案看起来并不是很简单,因为一旦Smarty :: display()被调用,Smarty就不允许更改变量,这会导致对Smarty :: assign()的每次调用都丢失。
所以我创建了一个继承Smarty的重载类,让它做脏事。
作为结论:
我发现自己的行为有点奇怪,但无论如何,我想。 :P