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 () 와 같은 자동로드 메커니즘을 사용하여 클래스를로드하려고 시도합니다.
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가 정의됩니다", 그렇지 않으면 출력 인터페이스가 정의되지 않습니다 ".
class_exists 와 interface_exists 는 매우 유사하지만 그 사이에는 필수적인 차이가 있습니다.
대상을 다르게 점검하십시오 .
class_exists는 클래스가 정의되었는지 확인하는 데 사용됩니다.
인터페이스_Exists는 인터페이스가 정의되어 있는지 확인하는 데 사용됩니다.
다른 용도 :
클래스는 일반적으로 객체 템플릿이며 인스턴스화 할 수 있습니다.
인터페이스는 클래스에서 구현해야하지만 인스턴스화 할 수없는 기능을 지정하는 컨벤션입니다.
자동 로딩의 영향 :
두 기능 모두 자동로드 매개 변수를 지원합니다. TRUE 로 설정된 경우 PHP는 정의되지 않은 클래스 또는 인터페이스를 자동으로로드하려고합니다.
차이점은 클래스의 자동 로딩은 일반적으로 클래스 로더 ( SPL_Autoload_register () 와 같은)에 의해 처리되는 반면, 인터페이스의 로딩은 일반적으로 클래스처럼 인스턴스화되지 않기 때문에 인터페이스의 로딩은 비교적 드물다는 것입니다.
실제 개발에서는 일반적으로 다른 시나리오에 따라 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>) && </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>-></span><span><span class="hljs-title function_ invoke__">log</span></span><span>(</span><span><span class="hljs-string">'로그 정보'</span></span><span>);
}
</span></span>