#php #arrays #unit-testing #zend-framework #phpunit
#php #массивы #модульное тестирование #zend-framework #phpunit
Вопрос:
Я тестирую модели в проекте zend, у меня возник вопрос о том, как получить значение массива, я обнаружил, что это невозможно сделать с помощью $array[index]
;
это метод поиска, который я тестирую:
static function find($name, $order=null, $limit=null, $offset=null) {
return self::_selectAndBind(
get_class(),
self::getDefaultAdapter()
->select()
->from('user')
->where('name = ?', array($name))
->order($order)
->limit($limit, $offset)
);
}
это тестовый пример для find():
public function testUser2CanFind() {
$this->assertNotNull($this->_model->find('yes'));
$this->assertEquals(1, count($this->_model->find('yes')));
print_r($this->_model->find('yes'));
//$this->assertEquals('admin',$this->_model->find('yes')[0]->login);
}
Я хочу получить значение имени входа, поэтому мы I print_r($this->_model->find('yes'));
получаем:
......Array
(
[0] => Application_Model_User2 Object
(
[_table:protected] => user
[_primary:protected] => Array
(
[0] => id
)
[_primary_ai:protected] => id
[_data:protected] => Array
(
[id] => 1
[created] => 2011-05-03 09:41:2
[login] => admin
[password_hash] => c8ebe700df11
[name] => yes
[surname] =>
[gender] =>
[street] =>
[postal_code] =>
[city] =>
[mobile] =>
[homephone] =>
[email] =>
[is_active] => 1
)
[_data_changed:protected] => Array
(
)
[_readonly:protected] => Array
(
[0] => id
)
[_db:protected] =>
)
)
как я мог бы получить значение [login] => admin
? Я пытался использовать $this->_model->find('yes')[0]
, но выдает ошибку, кто-нибудь может помочь?
Комментарии:
1. Отложенный массив пока недоступен, вы не можете использовать напрямую $this->_model->find(‘yes’)[0]. Вы должны использовать временную переменную.
2. Как насчет
$this->_model->find('yes')->current()
. Я предполагаю, что ваш метод find возвращает набор строк.3. @Marcin: Пока вы можете избежать этого, вы не должны вызывать «магические методы» напрямую.
::current()
вызывается функциейcurrent()
. Используйте это вместо.
Ответ №1:
$entity = current($this->_model->find('yes'));
echo $entity->login;
Обновить:
Если в этом списке более одного элемента, используйте обычную итерацию
foreach($this->_model->find('yes') as $entity)
echo $entity->login;
Комментарии:
1. теперь в этом массиве есть только один элемент, но что делать, если в этом массиве несколько элементов?