Accessing object's properties like if the objects were arrays
-
07-03-2021 - |
Question
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};
Solution
This should work:
$result = $myModel->fetchAll($query)->current();
echo 'Your name is '.$result->{'name_'.$language};
OTHER TIPS
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()
;
Try this:
$result->{"name_$language"}