현재 위치: > 최신 기사 목록> class_exists를 통해 특정 클래스가 인터페이스를 구현했는지 여부를 결정하는 방법은 무엇입니까?

class_exists를 통해 특정 클래스가 인터페이스를 구현했는지 여부를 결정하는 방법은 무엇입니까?

gitbox 2025-09-28

좋아, 나는 당신이 원하는 것을 이해합니다. 전후에 관련없는 콘텐츠를 포함 할 수있는 PHP 기사를 작성하는 데 도움이되지만, 본문은 제목의 내용을 완전히 설명하고 수평선으로 분리합니다. 기사는 직접 끝납니다. 예는 다음과 같습니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 이것은 텍스트와 관련이없는 이전 부분입니다.</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"내 환영합니다PHP공부 노트!&lt;br&gt;"</span></span><span>;
</span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"현재 시간은입니다:<span class="hljs-subst">$time</span></span></span><span>&lt;br&gt;";
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/**
 * 제목:통과하는 방법class_exists특정 클래스에서 인터페이스가 구현되었는지 여부를 결정?
 *
 * 존재하다PHP개발 중,때로는 특정 클래스에서 인터페이스가 구현되었는지 여부를 결정하고자합니다.,해당 논리적 처리를 위해。
 * PHP이를 달성하는 데 도움이되는 몇 가지 내장 기능이 제공됩니다.,주요 것입니다class_exists()그리고interface_exists(),게다가is_subclass_of()그리고in_array()기다리다。
 *
 * 하나、이해하다class_exists()그리고interface_exists()
 * - class_exists(string $className, bool $autoload = true): 지정된 클래스가 정의되었는지 여부를 결정합니다。
 * - interface_exists(string $interfaceName, bool $autoload = true): 지정된 인터페이스가 정의되었는지 여부를 결정합니다。
 *
 * 알아채다:class_exists판사 수업,interface_exists인터페이스 만 판단합니다,혼자 사용하십시오class_exists특정 유형이 특정 인터페이스를 구현하는지 직접 결정하는 것은 불가능합니다.。
 *
 * 둘、특정 유형이 인터페이스를 구현하는지 여부를 결정하십시오
 * PHP클래스가 인터페이스를 구현하는지 여부를 결정하는 몇 가지 방법이 있습니다.:
 *
 * 방법1:사용 class_implements()
 * class_implements($className) 이 클래스에서 구현 한 모든 인터페이스 이름 배열을 반환합니다.。
 */</span>

</span><span><span class="hljs-class"><span class="hljs-keyword">interface</span></span></span><span> </span><span><span class="hljs-title">LoggerInterface</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">log</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">string</span></span></span><span> </span><span><span class="hljs-variable">$message</span></span><span>);
}

</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">FileLogger</span></span><span> </span><span><span class="hljs-keyword">implements</span></span><span> </span><span><span class="hljs-title">LoggerInterface</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">log</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">string</span></span></span><span> </span><span><span class="hljs-variable">$message</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"기록에 기록하십시오: <span class="hljs-subst">$message</span></span></span><span>";
    }
}

</span><span><span class="hljs-variable">$className</span></span><span> = </span><span><span class="hljs-string">'FileLogger'</span></span><span>;
</span><span><span class="hljs-variable">$interfaceName</span></span><span> = </span><span><span class="hljs-string">'LoggerInterface'</span></span><span>;

</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-variable">$className</span></span><span>) &amp;&amp; </span><span><span class="hljs-title function_ invoke__">interface_exists</span></span><span>(</span><span><span class="hljs-variable">$interfaceName</span></span><span>)) {
    </span><span><span class="hljs-variable">$interfaces</span></span><span> = </span><span><span class="hljs-title function_ invoke__">class_implements</span></span><span>(</span><span><span class="hljs-variable">$className</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$interfaceName</span></span><span>, </span><span><span class="hljs-variable">$interfaces</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$className</span></span></span><span> 구현 된 인터페이스 </span><span><span class="hljs-subst">$interfaceName</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">"<span class="hljs-subst">$className</span></span></span><span> 인터페이스가 구현되지 않았습니다 </span><span><span class="hljs-subst">$interfaceName</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">"类或接口不存존재하다"</span></span><span>;
}

<span class="hljs-comment">/**
 * 방법2:사용 instanceof
 * 也可以통과하다实例化对象并사용 instanceof 판단합시다:
 */</span>

</span><span><span class="hljs-variable">$logger</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">FileLogger</span></span><span>();
</span><span><span class="hljs-keyword">if</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;br&gt;통과하다 instanceof 심판,이 개체는 구현됩니다 LoggerInterface"</span></span><span>;
}

<span class="hljs-comment">/**
 * 요약:
 * 1. class_exists() 仅심판类是否存존재하다。
 * 2. interface_exists() 심판接口是否存존재하다。
 * 3. 심판某类是否实现接口时,사용 가능 class_implements() 인터페이스 배열로 돌아갑니다,다시 사용하십시오 in_array() 심판。
 * 4. 对对象实例也可사용 instanceof 심판。
 *
 * 그래서,我们就可以安全地존재하다运行时심판某个接口是否已被某类实现,避免出现调用未实现방법的错误。
 */</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 尾部그리고正文无关的内容</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"이 기사를 읽어 주셔서 감사합니다PHP지도 시간!&lt;br&gt;"</span></span><span>;
</span><span><span class="hljs-variable">$footer_note</span></span><span> = </span><span><span class="hljs-string">"나는 오늘 공부했다 class_exists、interface_exists 게다가 class_implements 的사용방법。"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$footer_note</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>