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 |