访问__get()魔术方法返回的数组索引

时间:2013-06-25 20:41:52

标签: php smarty

我正在尝试将魔术方法__get()与类一起使用以访问私有属性。除非访问该属性,否则不会为该属性赋值,并且该值是从0开始索引的数组。

class Foo {
    private $bar;

    public function __get($p) {
        if ($p == 'bar') {
            if ($this->bar) {
                return $this->bar;
            }
            else {
                return $this->bar = $this->get_bar();
            }
        }
    }

    private function get_bar() {
        return Array('a', 'b', 'c');    // data from db
    }
}

在我的PHP代码中,我实例化了这个类的对象,并将其直接传递给Smarty(即$smarty->assign('obj', new Foo()))。我想从模板文件中的$bar属性访问索引0处的值。我试过这个:

    {$obj->bar[0]}

然而,这并没有为我返回任何东西......这种神奇的方法返回的数据是否支持这一点?

2 个答案:

答案 0 :(得分:1)

对不起大家!

我的问题是,在实际的代码中,我试图访问一个数组元素,该元素实际上嵌入了更深层次的数组中。

我打算删除这个问题,但是我觉得它可以很好地参考,以证明这种方式的魔术方法返回的数组可以使用标准的下标运算符访问,即使在Smarty模板中也是如此。

答案 1 :(得分:0)

您不能使用$smarty->assign()分配对象,assign()只接受关联数组和名称值对。请改用assign_by_ref()将对象发送到模板。

PHP / Smarty示例

$foo = new Foo();
$smarty->assign_by_ref('obj', $foo);

模板示例/用途

{$obj->bar[0]}