2013-07-06 2 views
0

Я использую extract(), чтобы превратить имена ассоциативных массивов в переменные. Но мне интересно, если повторный вызов extract() для повторного генерации переменных достаточно безопасен, чтобы зависеть от них, или переменные должны быть повторно инициализированы?Требуется ли повторное использование переменных extract()?

extract($display[0]); // Turn associative array names into variables. 
echo $foobaz . "\n"; 

$foobaz = ""; // Is this necessary? 
extract($display[1]); // Turn associative array names into variables. 
echo $foobaz . "\n"; 

// Or is this safe to use? 
extract($display[0], EXTR_OVERWRITE); 
+0

Что такое безопасная форма? – Edward

+0

Ой, подождите, я лгу. Я думал, что 'extract()' имеет безопасную форму. Оказывается, это почти всегда опасно. –

ответ

0

Пока каждый массив $ display [i] имеет все поля, то вам не нужно повторно инициализировать их. Однако, пожалуйста, избегайте извлечения любой ценой.

+0

Зачем избегать extract()? У меня есть массив со многими более чем дюжинами переменных, которые можно использовать из него. Это похоже на простое решение. Какая лучшая альтернатива? – Edward

+0

Почему не просто эхо $ display [1] ['foobaz']? – apartridge

+1

Я признаюсь, что иногда использую extract(), особенно при просмотре наборов результатов базы данных. Обычно я использую это: extract ($ row, 3, "db"); Это означает, что каждая переменная имеет перед собой $ db_. Пример: $ db_name, $ db_age и т. Д. Гораздо чище, и поскольку это строка базы данных, вам гарантировано, что записи будут перезаписываться каждый раз, если вы находитесь в цикле while, например. – Richard

Смежные вопросы