비교 연산자는 이름 그대로 두 값을 비교하도록 합니다. 자료형 비교표에서 다양한 자료형 관련 비교의 예제를 확인해 볼 수 있습니다.
예제 | 이름 | 결과 |
---|---|---|
$a == $b | Equal | $a와 $b가 같으면 TRUE. |
$a === $b | Identical | $a와 $b가 같고, 같은 자료형이면 TRUE. (PHP 4에서 추가) |
$a != $b | Not equal | $a가 $b와 같지 않으면 TRUE. |
$a <> $b | Not equal | $a가 $b와 같지 않으면 TRUE. |
$a !== $b | Not identical | $a가 $b와 같지 않거나, 같은 자료형이 아니면 TRUE. (PHP 4에서 추가) |
$a < $b | Less than | $a가 $b보다 작으면 TRUE. |
$a > $b | Greater than | $a가 $b보다 크면 TRUE. |
$a <= $b | Less than or equal to | $a가 $b보다 작거나 같으면 TRUE. |
$a >= $b | Greater than or equal to | $a가 $b보다 크거나 같으면 TRUE. |
정수를 문자열과 비교하면, 문자열이 수로 변환됩니다. 두개의 수 문자열을 비교하면, 정수로 비교됩니다. 이 규칙은 switch 구문에도 적용됩니다.
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 1 == 1 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}
?>
다양한 자료형에 대해서, 비교는 다음 표에 따라 이루어집니다. (순서대로)
연산수 1의 자료형 | 연산수 2의 자료형 | 결과 |
---|---|---|
null이나 string | string | NULL을 ""로 변환, 수치나 어휘 비교 |
bool이나 null | anything | bool로 변환, FALSE < TRUE |
object | object | 내장 클래스는 자신의 비교 함수를 정의할 수 있습니다. 다른 클래스는 비교할 수 없고, 같은 클래스는 배열과 같은 방식으로 프로퍼티를 비교합니다(PHP 4). PHP 5는 자체의 해석법을 가지고 있습니다. |
string, resource, number | string, resource, number | 문자열과 자원을 수로 변환하여, 일반적인 수학 |
array | array | 적은 멤버를 가진 배열이 작고, 연산수 1의 키가 연산수 2에서 발견되지 않으면 배열을 비교할 수 없고, 그렇지 않으면 - 값대 값으로 비교(아래 예제를 참고) |
array | 모두 | array가 항상 큽니다 |
object | 모두 | object가 항상 큽니다 |
Example #1 표준 배열 비교의 모사
<?php
// 표준 비교 연산자로 배열은 이렇게 비교합니다
function standard_array_compare($op1, $op2)
{
if (count($op1) < count($op2)) {
return -1; // $op1 < $op2
} elseif (count($op1) > count($op2)) {
return 1; // $op1 > $op2
}
foreach ($op1 as $key => $val) {
if (!array_key_exists($key, $op2)) {
return null; // uncomparable
} elseif ($val < $op2[$key]) {
return -1;
} elseif ($val > $op2[$key]) {
return 1;
}
}
return 0; // $op1 == $op2
}
?>
참고: strcasecmp(), strcmp(), 배열 연산자, 매뉴얼 자료형 섹션.
또다른 조건부 연산자는 "?:"(삼항) 연산자입니다.
Example #2 기본값 할당하기
<?php
// 사용 예제: 삼항 연산자
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// 위 예제는 다음의 if/else 구문과 동일합니다
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
(expr1) ? (expr2) : (expr3) 표현은 expr1이 TRUE이면 expr2로 평가되고, expr1이 FALSE이면 expr3로 평가됩니다.
PHP 5.3부터, 삼항 연산자의 중간 부분을 비울 수 있습니다. 표현식 expr1 ?: expr3은 expr1이 TRUE이면 expr1, 아니면 expr3를 반환합니다.
Note: 삼항 연산자는 구문이므로, 변수로 평가되지 않고 구문의 결과로 평가되는 점에 주의하십시오. 이 점은 참조로 변수를 반환할 때 중요합니다. 그러므로 참조로 반환하는 함수에서 return $var == 42 ? $a : $b; 구문은 작동하지 않고, 경고가 발생합니다.
Note: 삼항 연사자를 "쌓는" 일을 피하길 권합니다. 하나의 구문에서 하나를 초과하는 삼항 연산자를 사용할 때, PHP 작동은 명확하지 않습니다:
Example #3 명확하지 않은 삼항 작동
<?php
// 얼핏 보기에, 'true'를 출력할 것 같습니다
echo (true?'true':false?'t':'f');
// 그러나 위의 실제 출력은 't'입니다
// 이는 삼항 표현이 왼쪽에서 오른쪽으로 평가되기 때문입니다
// 다음이 위 코드와 동일한 더 명확한 버전입니다
echo ((true ? 'true' : 'false') ? 't' : 'f');
// 여기서, 첫 표현이 'true'로 평가되고, 이것이
// (bool)true로 전환되어 평가된 후, 두번째
// 삼항 표현의 true쪽을 반환합니다.
?>