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と同様に、 interface_existsは、インターフェイスが定義されているかどうかを確認するために使用されます。指定されたインターフェイスが存在するかどうかを示し、 trueまたはfalseを返します。
<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が定義されています」、それ以外の場合は出力「インターフェイスMyInterfaceは定義されていません」。
class_existsとinterface_existsは非常に似ていますが、それらには本質的な違いがあります。
ターゲットを別のチェックしてください:
class_existsは、クラスが定義されているかどうかを確認するために使用されます。
interface_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の使用:
通常、多型および依存関係の注入シナリオで使用されるインターフェイスが定義されているかどうかを判断します。
クラスがインターフェイスを実装しているかどうかを判断するとき、最初にinterface_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>