eroteev
eroteev

Reputation: 610

Accessing object's properties like if the objects were arrays

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

Answers (3)

Radek
Radek

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

dfsq
dfsq

Reputation: 193261

Try this:

$result->{"name_$language"}

Upvotes: 0

Godwin
Godwin

Reputation: 9907

This should work:

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

Upvotes: 2

Related Questions