访问作为成员变量的数组

时间:2014-07-23 14:46:02

标签: php smarty

class MyClass {
    public $myMember = ['key1' => 'val1', 'key2' => 'key2'];
}

$smarty = new Smarty();
$smarty->assign('object', new MyClass());
$smarty->assign('member', 'myMember');
$smarty->assign('key', 'key1');

如何在不引入新变量的情况下访问Smarty模板中的$object->$member.$key

直向前{$object->$member.$key}会导致错误(我猜.的优先级高于->?)

我想要一些不涉及引入新变量的东西,因此不是明显的{$temp=$object->$member}{$temp.$key}

1 个答案:

答案 0 :(得分:1)

我担心没有标准方法可以做到这一点。

使用时:

{$object->$member|var_dump}

Smarty知道它是一个数组并显示它的值,但我不知道任何访问该数组元素的方法。

但是,您可以做的是创建Smarty modifier:

// modifier.get.php
function smarty_modifier_get($array, $index)
{
    return $array[$index];
}

注册你的插件目录:

$smarty->addPluginsDir('myplugins');

然后你可以使用语法:

{$object->$member|get:$key} 

当然,如果您需要,可以经常使用它来改变更短的东西。

但我还应该回答其他一些事情。我从未使用过这样的赋值来将对象的属性用作变量或键作为变量。

在这种情况下,您也可以简单地分配给Smarty数组:

$obj = new MyClass();
$smarty->assign('array',$obj->myMember);

然后在Smarty中你可以操作标准数组而无需复杂的语法或修饰符。所以也许你应该考虑它,但当然它取决于你。