Есть ли разница между strlen () == 0 и empty ()? - PullRequest
8 голосов
/ 16 августа 2011

Я просматривал код проверки формы, который написал кто-то другой, и увидел это:

strlen() == 0

При тестировании, чтобы определить, является ли переменная формы пустой, я использую функцию empty(). Один путь лучше другого? Являются ли они функционально эквивалентными?

Ответы [ 8 ]

7 голосов
/ 16 августа 2011

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

empty('0'); // returns true, 
strlen('0'); // returns 1.

empty(array()); // returns true,
strlen(array()); // returns null with a Warning in PHP>=5.3 OR 5 with a Notice in PHP<5.3.

empty(0); // returns true,
strlen(0); // returns 1.
6 голосов
/ 16 августа 2011

Следующие вещи считаются пустыми:

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

strlen () просто проверяет, равна ли строка len 0. Она не проверяет int, float и т. Д. Какова ваша ситуация.

ссылка

5 голосов
/ 16 августа 2011

strlen для получения количества символов в строке, в то время как empty используется для проверки, является ли переменная пустой

Значение пустого:

empty("") //is empty for string
empty(0) // is empty for numeric types
empty(null) //is empty 
empty(false) //is empty for boolean
2 голосов
/ 16 августа 2011

empty противоположно логическому ложному.

empty - это языковая конструкция.

strlen - это функция.

strlen возвращаетдлина байтов строки.

strlen($str)==0 - это сравнение длины байта, равной 0 (произвольное сравнение).

Это сравнение приведет к значению true, если строка пуста- как и выражение empty($str) для пустой строки (нулевой длины).

Однако для всего остального:

empty противоположно логическому значению false.

strlen возвращает длину байта строки.

Они не очень похожи друг на друга.

2 голосов
/ 16 августа 2011

empty() вернет true, если $x = "0". Так что есть разница.

http://docs.php.net/manual/en/types.comparisons.php

2 голосов
/ 16 августа 2011
$f = 0; echo empty($f)? 'Empty':'Full'; // empty
$f = 0; echo strlen($f); // 1

Для форм я использую isset.Это более явно.; -)

0 голосов
/ 16 августа 2011

при вводе 0,

strlen(0) = 1
empty(0) = false <-- non-empty
0 голосов
/ 16 августа 2011

empty() для всех типов переменных.strlen(), я думаю, лучше использовать со строками или чем-то, что может быть безопасно приведено к строкам.Например,

strlen(array());

выдаст PHP Warning: strlen() expects parameter 1 to be string, array given ошибка

...