문제
PHP는 (int) 0과 (string) "0"을 사용할 때 비어있는 습관이 있습니다. empty()
기능. 숫자 또는 문자열 값이 0 인 경우 의도하지 않은 결과가있을 수 있습니다.
해결책
이것은 나를 위해 효과가 없었습니다.
if (empty($variable) && '0' != $variable) {
// Do something
}
나는 대신 사용했다 :
if (empty($variable) && strlen($variable) == 0) {
// Do something
}
다른 팁
나는 거의 사용하지 않는다 empty()
당신이 설명하는 이유 때문에. 그것은 합법적 인 가치를 공허함과 혼동합니다. 아마도 SQL에서 많은 일을하기 때문일 수도 있지만 사용하는 것을 선호합니다. NULL
값의 부재를 나타냅니다.
PHP에는 기능이 있습니다 is_null()
변수 또는 표현식을 테스트합니다 NULL
.
$foo = 0;
if (is_null($foo)) print "integer 0 is null!\n";
else print "integer 0 foo is not null!\n";
$foo = "0";
if (is_null($foo)) print "string '0' is null!\n";
else print "string '0' is not null!\n";
$foo = "";
if (is_null($foo)) print "string '' is null!\n";
else print "string '' is not null!\n";
$foo = false;
if (is_null($foo)) print "boolean false is null!\n";
else print "boolean false is not null!\n";
정확히 동등한 연산자를 사용할 수도 있습니다 ===
유사한 테스트를 수행하려면 :
if ($foo === null) print "foo is null!\n";
이것은 사실입니다 $foo
~이다 NULL
, 그러나 그렇지 않다면 false
, 영, ""
, 등.
"0"입니다 항상 거짓으로 간주됩니다 (또는 비어 있음) PHP에서, 그것은 의미가 있습니다. True에 대한 평가를 제로 평가하고 싶다면 사용하십시오. strlen($value)
.
"고정"은 한 관점입니다. 다른 하나는 그것이 "깨진"것이 아니라고 가정하고 의도적으로 설계된 방식으로 작업하는 법을 배우는 것입니다.
설명하는 문제가 주어지면 가장 좋은 점은 변수를 불확실한 유형 상태에 넣을 수 없도록 코드를 강화하는 것입니다. 그렇지 않으면 gettype ()를 사용하여 데이터 유형을 테스트하려고합니다.
나는 항상 내 코드베이스에 추가합니다
function is_blank($value) {
return empty($value) && !is_numeric($value);
}
빈 () 대신 사용하십시오. 그것은 0 (int, float 또는 string)을 비어 있지 않은 것으로 유지하는 문제를 해결합니다.
보다 http://www.php.net/manual/en/function.empty.php#103756 2011 년 5 월에 추가되었습니다.
일반적으로 값이 진정으로 무일하게 또는 거짓인지를 결정하기 위해 트리플 평등 연산자를 사용하려고합니다. 이것은 더 구체적이며 결과입니다 언제나 예상대로 정확하게 반환하십시오.
한 줄의 코드로 수행 할 수있는 작업을 수행 할 수있는 별도의 기능을 작성하지만 다른 연산자를 사용하는 것은 지나치게 복잡하고 난독 화가 추가됩니다.
또한, 많은 프로그래머는 0 또는 빈 문자열을 사용하여 존재하지 않는 값을 나타내는 경향이 있지만, 널 값을 사용하여 진정으로 비 아닌 유형에 관계없이 널 값을 사용하는 것이 더 정확합니다. -존재.
나는 이것을 공허함을 감지하는 데 사용합니다.
'' --> true
'0' --> false
0 --> false
함수:
function is_empty_or_zero($str) {
return (is_null($str) || ($str === ''));
}
나는 an을 만들었다 IsEmpty()
간결한 빠른 기능.
function IsEmpty($mData) {
return is_int($mData) ? false :
is_string($mData) ? $mData=="" :
empty($mData);
}
당신은 사용하려고합니다 empty()
의도되지 않은 것을 위해. 개인적으로, 나는 그것이 행동이 PHP의 오래된 프로그래밍 패러다임에서 비롯된 것으로 생각되며 아마도 은퇴 할 수 있다고 생각합니다.
대신 수표를 더 명확하게 만드십시오. 값이 유용하지 않은지 확인하는 대신 그 값을 확인하십시오. 예를 들어, 배열을 원한다면 배열인지 확인하십시오 (is_array()
) 문자열인지 확인하는 대신.
또한, 당신은 모두 $_POST
그리고 $_GET
변수는 문자열이므로 ""를 비교하거나 확인할 수 있습니다. strlen() == 0
.
if ( is_int($val) || !empty($val) ) {;}
나는 사용했다 ord
통과 된 값이 비어 있는지 확인하는 기능.
/*
* SPACE is not empty - Please do trim before using this function for your own purpose
* var_dump(is_having_value(0)); // true
var_dump(is_having_value(0000)); // true
var_dump(is_having_value(" 0")); // true
var_dump(is_having_value("")); // false
var_dump(is_having_value(" ")); // true
var_dump(is_having_value('\t')); // true
var_dump(is_having_value('')); // false
var_dump(is_having_value('o')); // true
var_dump(is_having_value('O')); // true
var_dump(is_having_value('0')); //true
var_dump(is_having_value(null)); //false
var_dump(is_having_value()); //false
*/
function is_having_value($val = null) {
if (is_array($val) || is_object($val)):
$logic_empty = empty($val);
return !$logic_empty;
else:
$ascii = ord($val);
if ($ascii == 48 || $ascii = 0 || $ascii == 32):
return true;
else:
$logic_empty = empty($val);
return !$logic_empty;
endif;
endif;
}
이 문제에 대한 가장 효과적인 솔루션은 변수가 잘못된 지 테스트하는 것입니다.
if (!$variable_name) {echo $variable_name;}
변수가 비어 있거나 null인지는 중요하지 않으며, IF 조건부에 넣을 때 모두 False와 같습니다.