현재 위치: > 최신 기사 목록> class_exists와 interface_exists의 차이점은 무엇입니까? PHP 인터페이스와 클래스 간의 판단 및 수업의 비교 분석

class_exists와 interface_exists의 차이점은 무엇입니까? PHP 인터페이스와 클래스 간의 판단 및 수업의 비교 분석

gitbox 2025-07-02

1. class_exists 함수

class_exists 는 PHP에서 지정된 클래스가 정의되었는지 확인하기 위해 사용되는 함수입니다. 클래스가 정의 된 경우 true를 반환하십시오. 그렇지 않으면 False를 반환하십시오.

문법:
 <span><span><span class="hljs-title function_ invoke__">class_exists</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$class_name</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$autoload</span></span><span> = </span><span><span class="hljs-literal">true</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $ class_name : 확인할 클래스 이름은 문자열이어야합니다.

  • $ autoload : 자동 로딩을 활성화할지 여부 (기본값은 ). False 로 설정되면 PHP는 클래스를 자동으로로드하려고 시도하지 않습니다.

예:
 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">class_exists</span></span><span>(</span><span><span class="hljs-string">'MyClass'</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'친절한 MyClass 한정된'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'친절한 MyClass 한정되지 않은'</span></span><span>;
}
</span></span>

위의 예에서는 class_exists가 MyClass가 이미 존재하는지 확인하는 데 사용됩니다. 존재하는 경우, 출력 "클래스 MyClass가 정의됩니다", 그렇지 않으면 "클래스 MyClass가 정의되지 않습니다".

$ autoload가 true 로 설정되면 클래스가로드되지 않은 경우 PHP를로드하려고합니다. 기본적으로 PHP는 spl_autoload_register () 와 같은 자동로드 메커니즘을 사용하여 클래스를로드하려고 시도합니다.


2. Interface_exists 함수

class_exists 와 마찬가지로 인터페이스_Exists는 인터페이스가 정의되어 있는지 확인하는 데 사용됩니다. 지정된 인터페이스가 존재하는지 여부 나타냅니다.

문법:
 <span><span><span class="hljs-title function_ invoke__">interface_exists</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$interface_name</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$autoload</span></span><span> = </span><span><span class="hljs-literal">true</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $ interface_name : 확인할 인터페이스 이름은 문자열이어야합니다.

  • $ autoload : 자동 로딩을 활성화할지 여부 (기본값은 ). False 로 설정되면 PHP는 인터페이스를 자동으로로드하려고 시도하지 않습니다.

예:
 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">interface_exists</span></span><span>(</span><span><span class="hljs-string">'MyInterface'</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'인터페이스 MyInterface 한정된'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'인터페이스 MyInterface 한정되지 않은'</span></span><span>;
}
</span></span>

이 예에서는 Interface_exists가 MyInterface 인터페이스가 정의되어 있는지 확인합니다. 정의 된 경우, 출력 "인터페이스 Myinterface가 정의됩니다", 그렇지 않으면 출력 인터페이스가 정의되지 않습니다 ".


3. class_existsinterface_exists 의 차이

class_existsinterface_exists 는 매우 유사하지만 그 사이에는 필수적인 차이가 있습니다.

  • 대상을 다르게 점검하십시오 .

    • class_exists는 클래스가 정의되었는지 확인하는 데 사용됩니다.

    • 인터페이스_Exists는 인터페이스가 정의되어 있는지 확인하는 데 사용됩니다.

  • 다른 용도 :

    • 클래스는 일반적으로 객체 템플릿이며 인스턴스화 할 수 있습니다.

    • 인터페이스는 클래스에서 구현해야하지만 인스턴스화 할 수없는 기능을 지정하는 컨벤션입니다.

  • 자동 로딩의 영향 :

    • 두 기능 모두 자동로드 매개 변수를 지원합니다. TRUE 로 설정된 경우 PHP는 정의되지 않은 클래스 또는 인터페이스를 자동으로로드하려고합니다.

    • 차이점은 클래스의 자동 로딩은 일반적으로 클래스 로더 ( SPL_Autoload_register () 와 같은)에 의해 처리되는 반면, 인터페이스의 로딩은 일반적으로 클래스처럼 인스턴스화되지 않기 때문에 인터페이스의 로딩은 비교적 드물다는 것입니다.


4. 시나리오 비교를 사용하십시오

실제 개발에서는 일반적으로 다른 시나리오에 따라 class_exists 또는 interface_exists를 사용할지 판단해야합니다.

  • class_exists 사용 :

    • 클래스가 정의 또는로드되었는지 여부를 결정하며, 일반적으로 클래스의 인스턴스화에 사용됩니다.

    • 자동 로딩 메커니즘 하에서이 함수는 일반적으로 중복 하중 또는 인스턴스화를 방지하기 위해 클래스가로드되었는지 확인하는 데 사용됩니다.

    예:

     <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">class_exists</span></span><span>(</span><span><span class="hljs-string">'DatabaseConnection'</span></span><span>)) {
        </span><span><span class="hljs-variable">$db</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DatabaseConnection</span></span><span>();
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-comment">// 处理한정되지 않은친절한的情况</span></span><span>
    }
    </span></span>
  • Interface_exists 사용 :

    • 인터페이스가 정의되는지, 일반적으로 다형성 및 종속성 주입 시나리오에서 사용되는지 결정하십시오.

    • 클래스가 인터페이스를 구현했는지 여부를 결정할 때 먼저 인터페이스_Exists를 사용하여 인터페이스가 이미 존재하는지 여부를 결정한 다음 클래스가 인터페이스를 구현했는지 여부를 결정할 수 있습니다.

    예:

     <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">interface_exists</span></span><span>(</span><span><span class="hljs-string">'LoggerInterface'</span></span><span>) &amp;&amp; </span><span><span class="hljs-variable">$logger</span></span><span> </span><span><span class="hljs-keyword">instanceof</span></span><span> LoggerInterface) {
        </span><span><span class="hljs-variable">$logger</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">log</span></span><span>(</span><span><span class="hljs-string">'로그 정보'</span></span><span>);
    }
    </span></span>