現在の位置: ホーム> 最新記事一覧> インターフェイスが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()待って。
 *
 * 1つ、理解する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>