PHP 매뉴얼
이전 | 13. 장. 클래스와 객체 | 다음

# PHP 5에서 객체 비교

주의
이 확장 모듈은 실험적입니다. 이 확장 모듈의 작동 -- 함수의 이름과 이 확장 모듈에 대한 모든 문서 자료에 대해서 -- 은 이후의 PHP 릴리즈에서 예고 없이 변경될 수 있습니다. 이 확장 모듈의 사용은 사용자의 책임하에 이루어집니다.

PHP 5에서 객체 비교는 PHP 4보다 좀더 복잡하고 객체 지향 언어 (PHP 5는 그런 언어가 아니다)에서 기대할수 있는 특성에 더 가깝다.

비교 연산자 (`==`)를 사용할 때에는 객체 변수는 단순 한 방식으로 비교된다. 즉: 두 객체 인스턴스가 같은 속성과 값을 갖고, 같은 클래스에서 파생된 인스턴스이고, 같은 네임스페이스에서 선언되었 다면 동일한 객체라고 본다.

하지만, 식별 연산자 (`===`)를 사용하면 객체 변수는 오직 같은 클래스(특별한 네임스페이스에서)의 같은 인스턴스로 참조될때만 동일한 객체라고 본다.

다음 예제 코드를 보고 이런 규칙을 음미해보자.

예 13-3. PHP 5에서의 객체 비교에 대한 예제 코드

`<?php
function bool2str($bool) {
if ($bool === false) {
return 'FALSE';
} else {
return 'TRUE';
}
}
function compareObjects(&$o1, &$o2) {
echo 'o1 == o2 : '.bool2str($o1 == $o2)."\n";
echo 'o1 != o2 : '.bool2str($o1 != $o2)."\n";
echo 'o1 === o2 : '.bool2str($o1 === $o2)."\n";
echo 'o1 !== o2 : '.bool2str($o1 !== $o2)."\n";
}
class Flag {
var $flag;
function Flag($flag=true) {
$this->flag = $flag;
}
}
namespace Other {
class Flag {
var $flag;
function Flag($flag=true) {
$this->flag = $flag;
}
}
}
$o = new Flag();
$p = new Flag();
$q = $o;
$r = new Other::Flag();
echo "Two instances of the same class\n";
compareObjects($o, $p);
echo "\nTwo references to the same instance\n";
compareObjects($o, $q);
echo "\nInstances of similarly named classes in different namespaces\n";
compareObjects($o, $r);
?>`

이 예제 코드는 다음과 같이 출력한다:

    Two instances of the same class
    o1 == o2 : TRUE
    o1 != o2 : FALSE
    o1 === o2 : FALSE
    o1 !== o2 : TRUE

    Two references to the same instance
    o1 == o2 : TRUE
    o1 != o2 : FALSE
    o1 === o2 : TRUE
    o1 !== o2 : FALSE

    Instances of similarly named classes in different namespaces
    o1 == o2 : FALSE
    o1 != o2 : TRUE
    o1 === o2 : FALSE
    o1 !== o2 : TRUE

이전 | 처음으로 | 다음
PHP 4에서 객체 비교 | 위로 | 참조 표현