개발자의 끄적끄적

[PHP] 비교 연산자 == 와 === 의 차이 본문

개발/php

[PHP] 비교 연산자 == 와 === 의 차이

효벨 2020. 6. 16. 03:00
728x90
반응형

[PHP] 비교 연산자 == 와 === 의 차이 

 

 

이 두 비교 연산자의 차이는 비슷하면 "참"으로 인식하고, 아니면 엄격하게 비교한다는 점입니다. == 는 대충이 되고, === 는 엄격하게 인데, 글자 하나라도 틀리다면 "거짓"으로 결정해 버리는 게 === 입니다.

우선 == 로 true 에 대한 비교 를 보겠습니다.

예제(ex #1

 <?php 
 $a 
1
 if(
$a == true){ 
      echo 
"true "// 결과: true 
 


 
$a true
 if(
$a == true){ 
      echo 
"true "// 결과: true 
 


 
// 음수도 참이라고 인식합니다. 
 
$a = -1
 if(
$a == true){ 
      echo 
"true "// 결과: true 
 


 
$a "1"
 if(
$a == true){ 
      echo 
"true "// 결과: true 
 


 
$a "-1"
 if(
$a == true){ 
      echo 
"true "// 결과: true 
 

 
?>


다음은 == 로 false 의 비교 입니다.

예제(ex #2

 <?php
 $a 
false
 if(
$a == false){ 
      echo 
"true "// 결과: true 
 


 
// 0 이거나 문자열 "0" 이면 false입니다. 
 
$a 0
 if(
$a == false){ 
      echo 
"true "// 결과: true 
 


 
$a = array();; 
 if(
$a == false){ 
      echo 
"true "// 결과: true 
 


 
$a ""
 if(
$a == false){ 
      echo 
"true "// 결과: true 
 


 
$a null
 if(
$a == false){ 
      echo 
"true "// 결과: true 
 

 
?>


다음은 == 로 문자열 "php"에 대한 비교인데, 결과는 흥미롭게 나옵니다.

예제(ex #3

 <?php 
 $a 
true
 if(
$a == "php"){ 
      echo 
"true "// 결과: true 
 


 
// 0 이면 true 이고, 문자열 "0" 이면 false 로 인식합니다. 
 // 0 == false 이면, 0 == "php"는 false가 아닙니다.
 
$a 0
 if(
$a == "php"){ 
      echo 
"true "// 결과: true 
 


 
$a "php"
 if(
$a == "php"){ 
      echo 
"true "// 결과: true 
 

 
?>


앞서 본 바와 같이 == 는 정확한 비교가 조금 어려울 수 있음을 알아 둘 필요가 있습니다. 이제 === 로 true 에 대한 비교를 해보겠습니다.

예제(ex #4

 <?php 
 
// true는 상수 1의 값을 가지지만
 // 정수 1은 아니므로 false 입니다.
 
$a 1
 if(
$a === true){ 
      echo 
"true "// 결과:
 


 
$a true
 if(
$a === true){ 
      echo 
"true "// 결과: true 
 


 
$a = -1
 if(
$a === true){ 
      echo 
"true "// 결과:
 


 
$a "1"
 if(
$a === true){ 
      echo 
"true "// 결과:
 


 
$a "-1"
 if(
$a === true){ 
      echo 
"true "// 결과:
 

 
?>


예제(ex #5

 <?php
 $a 
false
 if(
$a === false){ 
      echo 
"true "// 결과: true 
 


 
// 0 은 false 이지만 상수 false 가 아니므로 거짓입니다. 
 
$a 0
 if(
$a === false){ 
      echo 
"true "// 결과:
 


 
$a = array();; 
 if(
$a === false){ 
      echo 
"true "// 결과:
 


 
$a ""
 if(
$a == false){ 
      echo 
"true "// 결과:
 


 
// null 은 false 와 같지만 상수 false가 아니므로 거짓입니다.
 
$a null
 if(
$a === false){ 
      echo 
"true "// 결과:
 

 
?>


예제(ex #6

  <?php 
 $a 
true
 if(
$a === "php"){ 
      echo 
"true "// 결과:
 


 
$a 0
 if(
$a === "php"){ 
      echo 
"true "// 결과: 
 


 
$a "php"
 if(
$a === "php"){ 
      echo 
"true "// 결과: true 
 

 
?>


예제(ex #7

 <?php 
 $a 
""
 if(
$a === null){ 
      echo 
"true "// 결과: 
 


 
$a ""
 if(
$a === ""){ 
      echo 
"true "// 결과: true 
 


 
$a ""
 if(
$a === " "){ 
      echo 
"true "// 결과: 
 


 
$a ""
 if(
$a === false){ 
      echo 
"true "// 결과: 
 

 
?> 


예제(ex #8

 <?php 
 $a 
NULL
 if(
$a === null){ 
      echo 
"true "// 결과: true
 


 
$a ""
 if(
$a === ""){ 
      echo 
"true "// 결과: true 
 


 
$a " "
 if(
$a === " "){ 
      echo 
"true "// 결과: true
 


 
$a = array(); 
 if(
$a === array()){ 
      echo 
"true "// 결과: true
 


 
$a FALSE
 if(
$a === false){ 
      echo 
"true "// 결과: true
 

 
?> 


가능하다면 엄격한 === 로 비교하는게 좋지 않을까요?  왜냐하면, == 와 === 에 대한 이해 차이로 공격자는 이러한 빈틈에 여러분의 웹사이트를 공격할지도 모른다는 사실입니다. 개발자도 사람인지라 실수를 하니까요.

예제(ex #9

  <?php 
 
if("php" == 0){ 
      echo 
"true "// 결과: true 
 


 if(
== null){ 
      echo 
"true "// 결과: true 
 


 if(
null == "php"){ 
      echo 
"true "// 결과: 
 

 
?>

 

출처 : https://blog.habonyphp.com/138

반응형
Comments