使用Smarty,是否可以在方法的返回值上调用方法?

时间:2010-09-06 13:11:00

标签: php smarty

我有Smarty代码

{$obj->foo()->bar()}

和Smarty在表达中抱怨'无法识别的标签'。如果我将其改为

{$obj->foo()}

它没有抱怨,所以我认为问题在于我正在调用方法结果的方法。这是Smarty解析器的限制,还是我错过了其他的东西?

我知道我可以用{assign}解决这个问题,我只是想知道我是否正确理解了这些限制的程度。

1 个答案:

答案 0 :(得分:2)

您使用的是Smarty2还是Smarty3?

Smarty2将要求您在第一种方法后使用{assign}。如果将多个参数传递给方法,也会出现问题。

Smarty3有一个完全重写的解析器,你可以完全按照自己的意愿行事。您也不再需要{assign},因为您只需{$new_var = "Anything"}

这是Smarty3中的一项测试:

我们的课程

class Foo {
    function boo() {
        return new Boo(); 
    }
}

class Boo {
    function woo() {
        return "woo!";
    }
}

分配的模板变量

$foo = new Foo();
$tpl->assign('foo', $foo);

模板

{$foo->boo()->woo()}

浏览器输出

woo!