Доступ к свойствам объекта, как если бы объекты были массивами - PullRequest
1 голос
/ 23 ноября 2011

Возможно ли получить доступ к свойствам объекта, когда вы не знаете, как именно будут написаны их имена?

Моя проблема в том, что когда запрос возвращает объект 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};

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

Это должно работать:

$result = $myModel->fetchAll($query)->current();
echo 'Your name is '.$result->{'name_'.$language};
1 голос
/ 23 ноября 2011

Когда вы используете Zend_Db_Table и fetchAll()->current(), тип возвращаемого объекта - Zend_Db_Table_Row, который наследуется от Zend_Db_Table_Row_Abstract. Zend_Db_Table_Row_Abstract реализует интерфейс ArrayAccess ( manual ), что означает, что вы можете ссылаться на свойства объекта, используя обозначение ключа массива.

Итак, синтаксис:

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

должно работать без использования toArray();

0 голосов
/ 23 ноября 2011

Попробуйте это:

$result->{"name_$language"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...