PHP 유형 연산자

伊谢尔伦
풀어 주다: 2016-11-24 13:24:30
원래의
1443명이 탐색했습니다.

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 = &#39;MyClass&#39;;
    $d = &#39;NotMyClass&#39;;
    var_dump($a instanceof $b); // $b is an object of class MyClass
    var_dump($a instanceof $c); // $c is a string &#39;MyClass&#39;
    var_dump($a instanceof $d); // $d is a string &#39;NotMyClass&#39;
?>
로그인 후 복사

위의 예 프로세스는 다음을 출력합니다:

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 = &#39;NotMyClass&#39;;
    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() 사용이 복원되었습니다.


관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!