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

Php 使用Smarty,是否可以对方法的返回值调用方法?,php,smarty,Php,Smarty,我有智能密码 {$obj->foo()->bar()} Smarty抱怨表达式中存在“无法识别的标记”。如果我把它改成 {$obj->foo()} 它不会抱怨,所以我假设问题在于我正在对方法的结果调用一个方法。这是Smarty解析器的一个限制,还是我遗漏了其他东西 我知道我可以用{assign}解决这个问题,我只是想知道我是否正确理解了限制的范围。您使用的是Smarty2还是Smarty3 Smarty2将要求您在第一个方法之后使用{assign}。如果将多个参数传递给一个

我有智能密码

{$obj->foo()->bar()}
Smarty抱怨表达式中存在“无法识别的标记”。如果我把它改成

{$obj->foo()}
它不会抱怨,所以我假设问题在于我正在对方法的结果调用一个方法。这是Smarty解析器的一个限制,还是我遗漏了其他东西


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

您使用的是Smarty2还是Smarty3

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

Smarty3有一个完全重写的解析器,您可以完全按照自己的意愿进行操作。您也不再需要
{assign}
,只需执行
{$new\u 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! 

正如我所记得的(我的智能时代大约在5年前结束了?),我正在为此使用
{assign}
。也许有一个更优雅的解决方案,但我想我当时四处寻找,我只能找到这些。祝你好运我使用的是Smarty 2,但很高兴知道Smarty 3修复了它。我可能会在最终发布时更新。