簡體   English   中英

如何正確遍歷Mustache中具有私有屬性的對象數組?

[英]How to iterate over array of objects with private properties in Mustache properly?

小胡子模板的示例:

{{#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
    ]
];

在這種情況下不起作用-輸出為空(屬性中沒有值)

為什么不在類中使用類似這樣的函數,而不是魔術方法?

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

    return $vars;
}

然后調用該函數以將變量獲取為數組

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

您可以使用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

當然,這是一個簡單的示例,您需要為其余的繼承方法添加更多業務邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM