비교 연산자

비교 연산자는 이름 그대로 두 값을 비교하도록 합니다. 자료형 비교표에서 다양한 자료형 관련 비교의 예제를 확인해 볼 수 있습니다.

비교 연산자
예제이름결과
$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
(== "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쪽을 반환합니다.
?>

'php' 카테고리의 다른 글

[WP] 영문 워드프레스 한글로  (0) 2012.04.22
PHPExcel  (0) 2012.04.17
projects snoopy  (0) 2012.03.09
array_merge  (0) 2012.02.15
ob_start  (0) 2012.02.15

+ Recent posts