0

我正在尝试将魔术方法__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]}

但是,这并没有为我返回任何东西......这是这个魔术方法返回的数据不支持的东西吗?

4

2 回答 2

1

对不起大家!

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

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

于 2013-06-26T19:37:31.890 回答
0

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

PHP/Smarty 示例

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

模板示例/用法

{$obj->bar[0]}
于 2013-06-25T20:50:11.400 回答