Accessing object's properties like if the obje

2019-08-03 08:51发布

Is it possible to access object's properties, when you don't know just how their names will be written?

My problem is that when a query returns Zend_Db_Table_Rowset_Abstract object, there are some fields with names like "name_fr", "name_en", "name_au". I want to access either of them according to the current language used in the application. To achieve this I write the code this way:

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

This is very annoying. Is it possible to write a code like this for example:

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

3条回答
forever°为你锁心
2楼-- · 2019-08-03 09:19

Try this:

$result->{"name_$language"}
查看更多
爷、活的狠高调
3楼-- · 2019-08-03 09:30

When you use Zend_Db_Table and fetchAll()->current(), type of returned object is Zend_Db_Table_Row, which inherits from Zend_Db_Table_Row_Abstract. Zend_Db_Table_Row_Abstract implements ArrayAccess(manual) interface, which means you can refer to object properties using array key notation.

So, syntax:

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

should work without using toArray();

查看更多
萌系小妹纸
4楼-- · 2019-08-03 09:36

This should work:

$result = $myModel->fetchAll($query)->current();
echo 'Your name is '.$result->{'name_'.$language};
查看更多
登录 后发表回答