从类成员返回引用?

时间:2010-06-10 10:51:32

标签: php smarty

我的班级基本上是这样的:

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不返回正确的引用?非常感谢帮助!

2 个答案:

答案 0 :(得分:0)

你正在使用$ this-> template_compile_path;初始化Smarty。你有没有初步化?另外一点是你设置PHP来显示错误吗?你看过你的网络服务器错误日志了吗?

如果您对函数返回的内容有疑问,请在结果上使用print_r。

答案 1 :(得分:0)

解决方案看起来并不是很简单,因为一旦Smarty :: display()被调用,Smarty就不允许更改变量,这会导致对Smarty :: assign()的每次调用都丢失。

所以我创建了一个继承Smarty的重载类,让它做脏事。

作为结论:

  • 如果您仍需要在模板中分配变量,则永远不要调用Smarty :: display()。
  • 在调用Smarty :: display()之前调用Smarty :: assign()。

我发现自己的行为有点奇怪,但无论如何,我想。 :P