2012-02-24 23 views
0

在php模板中,我有一個對象$obj,它具有$obj->attr_1, $obj->attr_2等一些屬性。 如何從for循環中的樹枝模板調用它們?屬性名稱,由Twig中的表達式創建

我想是這樣的:

{% for i in 1..3 %} 
    {% set new_attr = 'attr_' ~ i %} 
    {{obj.new_attr}} 
{% endfor %} 

或類似這樣的

{% for i in 1..3 %} 
    {% set new_attr = 'attr_' ~ i %} 
    {{obj[new_attr]}} 
{% endfor %} 

,但它不工作。

回答

0

這兩種方法都行不通。在第一個,new_attr是一個字符串值,所以我認爲 obj.new_attr會嘗試字符串連接。第二種方法將不起作用,因爲它將obj視爲一個數組,這與對象不同。

你要求的是反射 - 能夠向對象詢問自己的信息,比如它的方法。 PHP對反射有基本的支持,如文檔http://www.php.net/manual/en/book.reflection.php(請參閱getMethods條目)所述,但它需要安裝擴展。

作爲替代,爲什麼不把你的名爲get對象,這需要一個數字,然後調用適當的方法在一個單一的方法,如

public function get($attr) 
{ 
    if ($attr == 1) return $this->attr_1(); 
    // etc... 
} 
相關問題