어제 나는 다른 사람이 작성한 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" == !" "이 전송됩니다.
"a" == !" ""a" == !false"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)
}
답변
