instanceof는 PHP 변수가 특정 클래스의 인스턴스에 속하는지 여부를 확인하는 데 사용됩니다.
예제 #1 클래스에 instanceof
<?php class MyClass { } class NotMyClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof NotMyClass); ?>
를 사용하면 출력됩니다. :
bool(true)
bool(false)
instanceof를 사용하여 변수가 상위 클래스에서 상속된 하위 클래스의 인스턴스인지 여부를 확인할 수도 있습니다.
예제 #2 상속된 클래스에 대해 instanceof
<?php class ParentClass { } class MyClass extends ParentClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof ParentClass); ?>
를 사용하면 위 루틴은 다음을 출력합니다.
bool(true)
bool(true)
객체는 특정 클래스가 아닙니다. 클래스의 인스턴스에는 논리 연산자 not을 사용할 수 있습니다.
예제 #3 objectof를 사용하여 객체가 특정 클래스의 인스턴스가 아닌지 확인하세요.
<?php class MyClass { } $a = new MyClass; var_dump(!($a instanceof stdClass)); ?>
위 루틴은 다음을 출력합니다:
bool(true)
마지막으로, instanceof를 사용하여 변수가 인터페이스를 구현하는 객체의 인스턴스인지 여부를 확인할 수도 있습니다.
예 #4 인스턴스에서
<?php interface MyInterface { } class MyClass implements MyInterface { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof MyInterface); ?>
사용 인터페이스 위 루틴은 다음을 출력합니다.
bool(true)
bool(true)
instanceof는 일반적으로 클래스 이름과 함께 직접 사용되지만 객체 또는 문자열 변수를 사용할 수도 있습니다.
<?php interface MyInterface { } class MyClass implements MyInterface { } $a = new MyClass; $b = new MyClass; $c = 'MyClass'; $d = 'NotMyClass'; var_dump($a instanceof $b); // $b is an object of class MyClass var_dump($a instanceof $c); // $c is a string 'MyClass' var_dump($a instanceof $d); // $d is a string 'NotMyClass' ?>
위의 예 프로세스는 다음을 출력합니다:
bool(true)
bool(true)
bool(false)
테스트 중인 변수가 객체인 instanceof는 오류 메시지를 발행하지 않지만 Yes는 FALSE를 반환합니다. 상수 감지가 허용되지 않습니다.
예제 #6 다른 변수를 감지하기 위해 instanceof를 사용하세요
<?php $a = 1; $b = NULL; $c = imagecreate(5, 5); var_dump($a instanceof stdClass); // $a is an integer var_dump($b instanceof stdClass); // $b is NULL var_dump($c instanceof stdClass); // $c is a resource var_dump(FALSE instanceof stdClass); ?>
위 루틴은 다음을 출력합니다:
bool(false)
bool(false)
bool(false )
PHP 치명적인 오류: 인스턴스 오브는 객체 인스턴스를 기대하고 상수는 주어진
그러나 인스턴스 오브를 사용할 때 이해해야 할 몇 가지 함정이 있습니다. PHP 5.1.0 이전에는 확인할 클래스 이름이 존재하지 않는 경우, instanceof가 __autoload()를 호출했습니다. 또한 클래스가 로드되지 않으면 치명적인 오류가 생성됩니다. 동적 클래스 참조 또는 클래스 이름이 포함된 문자열 변수를 사용하면 이 문제를 피할 수 있습니다:
예제 #7 클래스 이름 조회 및 PHP 5.0에서 인스턴스 오브로 인해 발생하는 치명적인 오류 방지
<?php $d = 'NotMyClass'; var_dump($a instanceof $d); // no fatal error here ?>
위 루틴은 다음을 출력합니다:
bool(false)
instanceof 연산자는 PHP 5에 도입되었습니다. 이전에는 is_a()가 사용되었으나 나중에 is_a()가 폐기되고 인스턴스of로 대체되었습니다. PHP 5.3.0부터 is_a() 사용이 복원되었습니다.