[php] “! ==”와“==!”의 차이점 [닫은]

어제 나는 다른 사람이 작성한 PHP 코드를 수정했을 때 이것을 우연히 발견했습니다. 간단한 비교 ( if ($var ==! " "))가 예상대로 작동하지 않는다고 당황했습니다 . 몇 가지 테스트를 한 후에 나는 그 코드를 작성한 사람이 비교 연산자 ==!대신 사용되는 것을 깨달았습니다 !==. 나는 ==!어떤 언어 에서도 본 적이 없으므로이 코드가 어떻게 작동하고 테스트를 수행했는지 궁금해했습니다.

<?php
echo "int\n";
echo "1 !== 0: "; var_dump(1 !== 0);
echo "1 !== 1: "; var_dump(1 !== 1);
echo "1 ==! 0: "; var_dump(1 ==! 0);
echo "1 ==! 1: "; var_dump(1 ==! 1);
echo "bool\n";
echo "true !== false: "; var_dump(true !== false);
echo "true !== true: "; var_dump(true !== true);
echo "true ==! false: "; var_dump(true ==! false);
echo "true ==! true: "; var_dump(true ==! true);
echo "string\n";
echo '"a" !== " ": '; var_dump("a" !== " ");
echo '"a" !== "a": '; var_dump("a" !== "a");
echo '"a" ==! " ": '; var_dump("a" ==! " ");
echo '"a" ==! "a": '; var_dump("a" ==! "a");
?>

이 결과는 다음과 같습니다.

int
1 !== 0: bool(true)
1 !== 1: bool(false)
1 ==! 0: bool(true)
1 ==! 1: bool(false)
bool
true !== false: bool(true)
true !== true: bool(false)
true ==! false: bool(true)
true ==! true: bool(false)
string
"a" !== " ": bool(true)
"a" !== "a": bool(false)
"a" ==! " ": bool(false)
"a" ==! "a": bool(false)

연산자는 부울 및 정수 변수에는 작동하지만 문자열에는 작동하지 않는 것 같습니다. ==!PHP 문서 또는 검색 엔진 (Google, Bing, DuckDuckGo를 사용해 보았지만 리터럴 문자열을 검색하는 대신 해석하려고 시도하는 경우)에서 PHP 문서 또는 관련 내용을 찾을 수 없습니다 . 아무도 전에 이것을 보았고이 행동에 빛을 비출 수 있습니까?



답변

차이점은 연산자가 없다는 것입니다 ==!.

이 표현은 :

$a ==! $b

기본적으로 다음과 같습니다.

$a == (!$b)


답변

==!PHP 에는 연산자 가 없습니다

그 단지의 조합 ==!. 여기에 관련 연산자 만 있습니다 ==. 따라서 조합 ==!은 정상적으로 작동 ==하고 확인 Equality하고 나를 믿습니다.

$variable_a ==! $variable_b 

그 외에는

$variable_a == (!$variable_b)

따라서;

"a" ==! " ": bool(false)
"a" ==! "a": bool(false) //is same as "a" == (!"a")

true ==! false: bool(true)
true ==! true: bool(false)

여러 연산자 문자를 결합하면 항상 연산자로 작동하지 않을 수 있습니다. 예를 들어 =and !를 사용하면 !=또는 의 패턴 인 경우에만 연산자로 작동합니다 !==. 같은 이러한 문자에 대한 여러 조합이있을 수있다 !====, !==!등 등 운영자의 조합에 있어야 독특한 형식 , 독특한 위해 , 독특한 조합 , 확실히 (모든 문자가 다른 문자와 결합 실 거예요)와 그들 사이에 공간이없이 .

아래의 운영자 목록을 확인하십시오.

여기에 이미지 설명을 입력하십시오


답변

==! 연산자가 아니라 두 가지입니다.

==!

! 보다 우선 순위가 높은 ==

그래서 :

"a" !== " ": bool(true) “a”가 실제로 “”와 같지 않기 때문에-> true

"a" ==! " ": bool(false) -> “a”는! “와 같지 않으므로 false

==와! 사이의 공백으로 쓸 수 있습니다.


답변

==!존재하지 않습니다. 다소 비밀스러운 표기법입니다.== !

이러한 작업에서 공백은 중요하지 않으므로 쉽게 쓸 수 있습니다. a --> b평가는 a-- > b되지만 이상하게 보입니다.

따라서 질문에 관해서 "a" ==! " "는로 해석됩니다 "a" == !" ". 문자열의 부정에 의해 덮여 캐스팅 , 임의의 문자열을 의미하지만 "0"하고 " ", 주조 할 때입니다 true.

따라서 표현식 "a" == !" "이 전송됩니다.

  1. "a" == !" "
  2. "a" == !false
  3. "a" == true

그리고와 string "a"같지 않으므로 bool true전체 표현식을로 평가합니다 false.

이야기의 도덕은 무엇입니까? 누락되거나 잘못 배치 된 공간으로 인해 혼동하지 마십시오! 🙂


답변

==! 연산자가 아닙니다

==!PHP 비교 연산자가 아닙니다- == !공백 과 동일 합니다.

if ("a" !== " ") {
    // evaluates to true - "a" and " " are not equal
}

if ("a" == !" ") {
    // unreachable
} else {
    // evaluates to false - "a" is not equal to true (!" " evaluates to true)
}


답변