2011-11-23 100 views
1

当你不知道它们的名字将如何写入时,是否可以访问对象的属性?访问对象的属性,就像对象是数组一样

我的问题是,当查询返回Zend_Db_Table_Rowset_Abstract对象时,有一些名称类似“name_fr”,“name_en”,“name_au”的字段。我想根据应用程序中使用的当前语言访问它们中的任何一个。为了达到这个目的我这样写代码:

$result = $myModel->fetchAll($query)->current(); 
$row = $result->toArray(); 
echo 'Your name is '.$row['name_'.$language]; 

这很烦人。是否有可能写这样的代码,例如:

$result = $myModel->fetchAll($query)->current(); 
echo 'Your name is '.$result->name_{$language}; 
+0

你可以在自定义排类中隐藏这个逻辑:http://pastebin.com/ny6JtF5b – nevvermind

回答

2

这应该工作:

$result = $myModel->fetchAll($query)->current(); 
echo 'Your name is '.$result->{'name_'.$language}; 
+0

干杯Godwin!这是工作!请你告诉我这种行为在哪里记录。我如何搜索它?它有名字吗?非常感谢! – stefan

+0

公平地确定它通常被称为动态属性,但我找不到任何官方文档(尽管我确信它是这样)。 – Godwin

+0

它被称为变量变量:http://php.net/manual/en/language.variables.variable.php – singles

0

试试这个:

$result->{"name_$language"} 
1

当您使用Zend_Db_TablefetchAll()->current(),类型的返回对象是Zend_Db_Table_Row,它继承自Zend_Db_Table_Row_AbstractZend_Db_Table_Row_Abstract implements ArrayAccessmanual)接口,这意味着您可以使用数组键表示法引用对象属性。

所以,语法:

'Your name is '.$row['name_'.$language]; 

应不使用toArray()工作;

+0

谢谢你!这是非常有用的信息。 – stefan