programing

PHP에서 true/false는 어떻게 작동합니까?

stoneblock 2023. 8. 17. 20:35

PHP에서 true/false는 어떻게 작동합니까?

PHP가 내부적으로 참/거짓 비교를 어떻게 처리하는지 궁금합니다.true는 1로, false는 0으로 정의되는 것으로 알고 있습니다.내가 할 때if("a"){ echo "true";}그것은 "진실"을 외칩니다.PHP는 어떻게 "a"를 1로 인식합니까?

내용은 불리언 및 유형 비교 표에 대한 PHP 설명서에서 다룹니다.

부울로 변환할 때 다음 값은 FALSE로 간주됩니다.

  • 부울어FALSE그 자체로
  • 정수0(0)
  • 부유층0.0(0)
  • 빈 문자열, 그리고 문자열
  • 요소가 0인 배열
  • 멤버 변수가 0인 개체(PHP 4에만 해당)
  • 특수 활자NULL(설정되지 않은 변수 포함)
  • 빈 태그로 만든 SimpleXML 개체

다른 모든 값은 TRUE로 간주됩니다.

저는 이 페이지를 여러 번 방문했기 때문에 예시(느슨한) 비교 테스트를 게시하기로 결정했습니다.

결과:

""         -> false
"0"        -> false
"0.0"      -> true
"1"        -> true
"01"       -> true
"abc"      -> true
"true"     -> true
"false"    -> true
"null"     -> true
0          -> false
0.1        -> true
1          -> true
1.1        -> true
-42        -> true
"NAN"      -> true
0          -> false
NAN        -> true
null       -> false
true       -> true
false      -> false
[]         -> false
[""]       -> true
["0"]      -> true
[0]        -> true
[null]     -> true
["a"]      -> true
{}         -> true
{}         -> true
{"t":"s"}  -> true
{"c":null} -> true

테스트 코드:

class Vegetable {}

class Fruit {
    public $t = "s";
}

class Water {
    public $c = null;
}

$cases = [
    "",
    "0",
    "0.0",
    "1",
    "01",
    "abc",
    "true",
    "false",
    "null",
    0,
    0.1,
    1,
    1.1,
    -42,
    "NAN",
    (float) "NAN",
    NAN,
    null,
    true,
    false,
    [],
    [""],
    ["0"],
    [0],
    [null],
    ["a"],
    new stdClass(),
    new Vegetable(),
    new Fruit(),
    new Water(),
];

echo "<pre>" . PHP_EOL;

foreach ($cases as $case) {
    printf("%s -> %s" . PHP_EOL, str_pad(json_encode($case), 10, " ", STR_PAD_RIGHT), json_encode( $case == true ));
}

요약:.

  • 엄격할 때(===) 비교가 완료되었습니다. 다음을 제외한 모든 것.true돌아온다false.
  • 빈 문자열("")가 거짓임
  • 다음만 포함하는 문자열0("0")가 거짓임
  • NAN진리의
  • 빈 배열([])가 거짓임
  • 잘못된 값을 포함하는 컨테이너(어레이, 개체, 문자열)가 truthy입니다.
    • 이에 대한 예외는0""(세 번째 항목 참조)

0은 거짓이고 0이 아닌 것은 참입니다.

php에서는 연산자를 사용하여 보다 명확하게 테스트할 수 있습니다.

if (0==false) 
    echo "works"; // will echo works

if (0===false) 
    echo "works"; // will not echo anything

엄격한 검사를 위한 최상의 연산자는 다음과 같습니다.

if($foo === true){}

그런 식으로, 여러분은 정말로 그것이 사실인지 아닌지를 확인하는 것이지, 1이나 단순히 설정된 것이 아닙니다.

PHP는 약한 타이핑('타입 저글링'이라고 함)을 사용하는데, 이는 나쁜 생각입니다(다른 시간을 위한 대화이긴 하지만).부울이 필요한 컨텍스트에서 변수를 사용하려고 하면 변수가 무엇이든 부울로 변환됩니다. 여기에서 사용할 수 있는 대부분 임의 규칙에 따라 http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

연산자를 단항 함수로 생각합니다.is_false(type value)특정 유형 및 값에 대한 정확한 구현에 따라 true 또는 false를 반환합니다.구문 설탕을 통해 이러한 기능을 암시적으로 호출하는 문장을 고려합니다.

다른 가능성은 type에 캐스트 연산자가 있을 수 있으며, 이 경우 type을 다른 type으로 암시적으로 변환합니다. 이 경우 문자열은 Boolean으로 변환됩니다.

PHP는 이러한 세부 정보를 노출하지 않지만 C++은 운영자 구현의 세부 정보를 노출하는 운영자 오버로드를 허용합니다.

언급URL : https://stackoverflow.com/questions/2382490/how-does-true-false-work-in-php