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修复了它。我可能会在最终发布时更新。