2012-04-24 4 views
0

я использовал этот способ тестирования массива $ обр если пустойTesting массив пуст в случае заявление

if(!empty($arr)){ //do something } 

недавно, я увидел кого-то использовать другое, как:

if($arr){ //do something } 

просто хочу знать, не является ли второй способ простым способом тестирования массива или существует какой-то потенциальный риск здесь?

ответ

3

Пустой массив, такой как array() считается равным false. Таким образом, простой if ($arr) работает отлично.

empty делает то же самое сравнение, но не вызывает NOTICE о недостающих переменных, если переменная $arr вообще не существует. Вы не должны использовать empty, если вы уверены, что переменная существует, поскольку она подавляет достоверные сообщения об ошибках. Используйте только empty, если вы действительно не знаете, существует ли переменная или нет, и не контролируйте ее.

Для получения дополнительной информации о empty см. The Definitive Guide To PHP's isset And empty.

3

Второе приведение массива в булево. Пустые массивы отлиты до false, что-нибудь еще до true. Таким образом, if($arr) и if(!empty($arr)) функционально идентичны.

0

Второй способ не является идеальным. Если вы используете второй метод и определяете, что имеете дело с массивом (а вы нет) и передаете его в оператор foreach, вы получите ошибку. Это также более поучительно для того, что вы проверяете, чтобы сделать больше, чем тест с if ($ arr).

Мои предпочтения:

if (is_array($arr) && count($arr) > 0) { 
    //work with array 
} 

Edit: Я думаю, что моя основная точка здесь является то, что возможность проверить существование на массив является лишь частью проблемы. Если $ arr оказывается строкой, требуется более надежная проверка.

+1

'! Empty ($ arr)' также вернет true, если '$ arr' не является массивом (например, целое число' 1') –

+0

Действительно, не пустой также не является идеальным. +1 – Aaron

1

Оба метода функционально эквивалентны. Документация empty() упоминает следующие вещи считаются пустыми

"", 0, 0.0, "0", NULL, FALSE, array(), var $var; 

Взглянув на casting to a bool, мы можем видеть, что список совпадает со списком, что означает оба метода обработки различных типов таким же образом.

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