Я смотрел на какой-то код проверки формы, написанный кем-то другим, и я увидел это:
strlen() == 0
При тестировании, чтобы увидеть, является ли переменная формы пустой, я использую функцию empty()
. Один путь лучше, чем другой? Являются ли они функционально эквивалентными?
strlen
заключается в том, чтобы получить количество символов в строке, в то время как empty
используется для проверки, является ли переменная пустой
Значение пустого:
empty("") //is empty for string empty(0) // is empty for numeric types empty(null) //is empty empty(false) //is empty for boolean
Есть пара случаев, когда у них будет другое поведение:
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.
Следующие вещи считаются пустыми:
"" (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 и т. д. Какова ваша ситуация.
Справка
$f = 0; echo empty($f)? 'Empty':'Full'; // empty $f = 0; echo strlen($f); // 1
Для форм я использую isset
. Это более ясно. 😉
empty()
вернет true, если $x = "0"
. Так что есть разница.
empty
– это противоположность логическому ложному.
empty
– это языковая конструкция.
strlen
– это функция.
strlen
возвращает длину байтов строки.
strlen($str)==0
– сравнение длины байта, равного 0 (ослабленное сравнение).
Это сравнение приведет к истинному, если строка пуста – как и выражение empty($str)
в случае пустой (нулевой длины) строки.
Однако для всего остального:
empty
– это противоположность логическому ложному.
strlen
возвращает длину байтов строки.
Они не разделяют много друг с другом.
empty()
для всех типов переменных. strlen()
, я думаю, лучше использовать со строками или чем-то, что можно безопасно отливать по строкам. Для примера,
strlen(array());
будет бросать PHP Warning: strlen() expects parameter 1 to be string, array given
когда входной сигнал равен 0
,
strlen(0) = 1 empty(0) = false <-- non-empty