[英]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.