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


162

어제 나는 다른 사람이 작성한 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 문서 또는 관련 내용을 찾을 수 없습니다 . 아무도 전에 이것을 보았고이 행동에 빛을 비출 수 있습니까?


57
어서 ... upvotes 무엇입니까? 이와 같은 질문을 12 개 더 만들 수 있습니다. 그리고 준 진지한 분석으로 그들과 동행하십시오. 이것은 표준 교과서 연습입니다. 그래서 우리는 재미와 오락이 아닌 질과 정보에 투표합니다.
sehe

51
@sehe 그는 잘 연구 된 질문의 정의로 인해 인기를 얻었습니다. "답변을 철저히 검색했습니다", "구체적으로", 질문은 "다른 사람들과 관련이 있으며"주제입니다. OP는 시도를 해왔고 그가 시도한 것을 보여주었습니다. 이 사이트가 육성하려는 질문의 종류
JRaymond

11
@JRaymond : 문제와 답을 이해하기 매우 쉬운 사소한 질문이기 때문에 공감대를 얻었습니다. 사소한 측면은 더 많은 사람들을 끌어들이는 호기심을 증가시키고, 쉬운 측면은 질문과 그에 대한 답변을 이해하는 사람들의 비율을 증가시킵니다. 좋은 질문인지 아닌지와 관련이 없습니다.
토마스 보니 니

4
@JRaymond는 많은 찬성 투표에 관한 질문 사소한 것이라고 인정합니다 . 여러 가지 중에서 내 세 가지 질문을 살펴보십시오. 1 , 2 , 3 . 그들 중 어느 것도 당신이 구글에서 찾을 수있는 것 (대부분의 높은 투표 질문과는 달리)이며, 글을 쓰기 전에 잘 생각하고 시도합니다 (내가 글을 썼기 때문에 알고 있습니다). 그러나 이들은 전문 지식이 필요한 질문이므로 절대로 높은 표를 얻지 못합니다. 그것이 바로 여기서 시스템이 작동하는 방식입니다.
Shahbaz

3
@JRaymond sehe가 맞습니다. 작가들은 SO에 대한 현장 일을 가질 것입니다. 이 목록 ( php.net/quickref.php )을 내려 가고 함수가 해결책 인 흥미로운 문제를 제안하는 것이 좋습니다 . 더 모호하고 흥미로운 상황이나 기능이 많을수록 더 많은 표를 얻습니다.
Mike B

답변:


243

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

이 표현은 :

$a ==! $b

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

$a == (!$b)

10
와우, 그런 짧은 시간에 많은 좋은 답변. 나는! 오른쪽 변수에 적용되므로 가장 큰 값을 갖습니다. 다른 사람에 대한 죄송합니다)
제럴드 슈나이더

4
@ Gerald Schneider : 문법과 형식 (다른 설명과 관련하여 구체적으로 언급 한 답변)과 적어도 다른 답변과 동등하게되도록이 답변을 개선하는 것이 최소한이었습니다. !). 그러나 어쨌든 지금 편집했습니다.
BoltClock

나는 심지어 PHP로 프로그램하지 않고 심지어 "==!" 2 개의 연산자 "=="및 "!"로 읽습니다. 그것은 약간의 레이아웃이 당신이 무언가를 읽는 방법에 얼마나 많은 영향을 줄 수 있는지 보여줍니다.
StarNamer

2
@Bang Dao Um, JavaScript? === 및! ==입니다. 그러나 ==!
psr

2
@BangDao 이제 w3fools에 대한 다른 이유를 찾았 습니다. 읽어보십시오. 중요합니다.

77

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

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

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


2
나는을 사용할 수 있다는 환상에 빠졌다 <table>.
채드 해리슨

+ 거의 테이블이라고 생각했지만 ... 이미지는 실제로
Baba

38

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

==!

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

그래서 :

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

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

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


1
false because "a" is not equals to !" "! ""는 찌르기 위해 캐스트하고 ""는 사실이며! ""는 거짓임을 부정합니다.
Zaffy

@quarry 예 설명에 너무 많이 들어 가지 않았습니다 : p
Michael Laffargue

29

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

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

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

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

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

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

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


3
이 답변에서 언급 한 것과 달리, "a"== true는 비어 있지 않은 문자열이 부울 값 true로 캐스트되기 때문에 true로 평가됩니다. "a"=== true 표현식은 false로 평가됩니다.
파스칼 로진

25

==! 연산자가 아닙니다

==!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)
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.