我想做的是:
{myfunc myattribute=new MyClass('arg1', 'arg2')}
但是当我尝试时它给了我一个错误,说函数 MyClass 没有定义。
我一直在使用的解决方法是创建一个像这样的顶级函数:
function MyClass($arg1, $arg2) { return new MyClass($arg1, $arg2); }
然后在模板中做:
{myfunc myattribute=MyClass('arg1', 'arg2')}
但是有没有办法避免为每个我想从 Smarty 对比的类创建一个新的顶级函数?
我想我也可以创建一个只使用类名的函数来让我构造任何类,但这是一种丑陋的解决方案。
编辑:对于每个告诉我违反最佳实践的人,也许这会让你感觉更好:
我正在构建的对象是一个用于呈现一些 html 的小部件。实际代码如下所示:
{render_widget widget=new MyWidget() id="myid" name="myname"}
另外,不幸的是,我目前停留在 PHP 5.2 上,所以我不能使用闭包。我可以使用最新版本的 Smarty3,虽然我目前使用的是 Smarty 3.0 版本。