現在の位置: ホーム> 最新記事一覧> 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は定義されていません」。

$ autoloadTrueに設定されている場合、PHPはクラスがロードされていない場合にロードしようとすることに注意してください。デフォルトでは、PHPはSPL_AUTOLOAD_REGISTER()などの自動搭載メカニズムを使用してクラスをロードしようとします。


2。Interface_Exists関数

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は定義されていません」。


3. class_existsinterface_existsの違い

class_existsinterface_existsは非常に似ていますが、それらには本質的な違いがあります。

  • ターゲットを別のチェックしてください

    • class_existsは、クラスが定義されているかどうかを確認するために使用されます。

    • interface_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の使用

    • 通常、多型および依存関係の注入シナリオで使用されるインターフェイスが定義されているかどうかを判断します。

    • クラスがインターフェイスを実装しているかどうかを判断するとき、最初に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>) &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>