어제 나는 다른 사람이 작성한 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)
}