자료형 연산자

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 instanceof를 사용하여 객체가 클래스의 instanceof가 아닌지 확인

                  
<?php
class MyClass
{
}

$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

bool(true)
                

마지막으로 instanceof를 사용하여 변수가 인터페이스를 구현하는 클래스의 인스턴스화된 개체인지 여부를 확인할 수도 있습니다.

예제 #4 인터페이스와 함께 instanceof 사용

                  
<?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는 일반적으로 리터럴 클래스 이름과 함께 사용되지만 다른 객체 또는 문자열 변수와 함께 사용할 수도 있습니다.

예제 #5 다른 변수와 함께 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는 테스트 중인 변수가 객체가 아니면 오류를 던지지 않고 단순히 false를 반환합니다. 그러나 PHP 7.3.0 이전에는 상수가 허용되지 않았습니다.

예제 #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 Fatal error:  instanceof expects an object instance, constant given
                

PHP 7.3.0부터 instanceof 연산자의 왼쪽에 상수가 허용됩니다.

예제 #7 instanceof를 사용하여 상수 테스트

                  
<?php
var_dump(FALSE instanceof stdClass);
?>
                  
                

PHP 7.3에서 위 예제의 출력:

bool(false)
                

instanceof 연산자에는 is_a() 함수가 있는 기능적 변형이 있습니다.

기타