문제

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와 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top