Reputation: 610
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};
Upvotes: 1
Views: 281
Reputation: 8376
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()
;
Upvotes: 1
Reputation: 9907
This should work:
$result = $myModel->fetchAll($query)->current();
echo 'Your name is '.$result->{'name_'.$language};
Upvotes: 2