如何正确遍历Mustache中具有私有属性的对象数组?

时间:2018-09-23 14:22:57

标签: php mustache.php

胡子模板的示例:

{{#entites}}
  <a href="{{url}}">{{title}}</a>
{{/entities}}

呈现者:

$m = new Mustache_Engine(
  ['loader' => new Mustache_Loader_FilesystemLoader('../views')]
);

echo $m->render('index', $data);

基本嵌套数组。

$data = [
   'entities' => [
       [
         'title' => 'title value',
         'url' => 'url value',
       ] 
    ]
];

这在模板中正确呈现。

类的对象数组:

class Entity 
{
  private $title;

  private $url;

  //setter & getters

  public function __get($name)
  {
      return $this->$name;
  }
}

胡子参数:

$data = [
   'entities' => [
       $instance1
    ]
];

在这种情况下不起作用-输出为空(属性中没有值)

2 个答案:

答案 0 :(得分:1)

为什么不在类中使用这样的函数而不是魔术方法

public function toArray()
{
    $vars = [];
    foreach($this as $varName => $varValue) {
        $vars[$varName] = $varValue;
    }

    return $vars;
}

然后调用该函数以将变量作为数组获取

$data = [
   'entities' => $instance1->toArray()
];

答案 1 :(得分:0)

您可以使用ArrayAccess界面来访问您的私有财产,如下所示:

class Foo implements ArrayAccess {
    private $x = 'hello';

    public $y = 'world';

    public function offsetExists ($offset) {}

    public function offsetGet ($offset) {
        return $this->$offset;
    }
    public function offsetSet ($offset, $value) {}
    public function offsetUnset ($offset) {}
}

$a = new Foo;

print_r($a); // Print: hello

这当然是一个简单的示例,您需要为其余的继承方法添加更多的业务逻辑。