Smarty调用静态类方法

San*_*cho 3 php smarty

我想在我的 smarty 模板中调用 php 方法。

我有课

class TestClass
{
    public static myMth($vars) {
        var_dump($vars);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的模板中我输入:

{TestClass::myMth($someVar)}
Run Code Online (Sandbox Code Playgroud)

那是行不通的。我有错误:

解析错误:语法错误,意外的“myMth”(T_STRING),期望变量(T_VARIABLE)

我的代码有问题吗?

Mar*_*łek 6

事实上它的工作没有问题(Smarty 3.1.19):

在 PHP 中:

$data['elements'] = [1,2,3,4,5,6,7,8,9,10,11];
$smarty->assign('someVar',$data);

class TestClass
{
    public static function myMth($vars) { // added function word here - you missed it in question
        var_dump($vars);

        echo "<br />test test test<br />";
    }
}
Run Code Online (Sandbox Code Playgroud)

在聪明中:

{TestClass::myMth($someVar)}
Run Code Online (Sandbox Code Playgroud)

输出:

array(1) { ["elements"]=> array(11) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) [9]=> int(10) [10]=> int(11) } }
test test test
Run Code Online (Sandbox Code Playgroud)

但我不认为这是使用 Smarty 的最佳方式。

你应该使用:

$smarty->assign('result', TestClass::myMth($data));
Run Code Online (Sandbox Code Playgroud)

为什么?这很简单。Smarty 是模板引擎,您应该只在此处显示数据。您不应该启动类/方法等。如果myMyth函数名称发生变化或参数发生变化怎么办?您将需要更改您的 Smarty 模板文件。更好的方法是仅将此方法的输出分配给 Smarty。

但是,如果您仍然想这样做,您还可以查看Smarty 网站上的静态类部分。