Aktueller Standort: Startseite> Neueste Artikel> Was ist der Unterschied zwischen Class_exists und interface_exists? Vergleichende Analyse von Urteilsvermögen und Klasse zwischen PHP -Schnittstelle und Klasse

Was ist der Unterschied zwischen Class_exists und interface_exists? Vergleichende Analyse von Urteilsvermögen und Klasse zwischen PHP -Schnittstelle und Klasse

gitbox 2025-07-02

1. Class_exists Funktion

class_exists ist eine in PHP verwendete Funktion, um zu überprüfen, ob eine bestimmte Klasse definiert wurde. Rückgabe true, wenn die Klasse definiert ist, ansonsten false zurückgeben.

Grammatik:
 <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 : Der zu überprüfende Klassename muss eine Zeichenfolge sein.

  • $ autoload : Ob automatisches Laden aktiviert werden soll (Standard ist wahr ). Wenn er auf False gesetzt ist, versucht PHP nicht, die Klasse automatisch zu laden.

Beispiel:
 <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">'Art MyClass Definiert'</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">'Art MyClass Undefiniert'</span></span><span>;
}
</span></span>

Im obigen Beispiel werden Class_exists verwendet, um zu überprüfen, ob MyClass bereits vorhanden ist. Wenn dies vorhanden ist, ist die Ausgabe "Klassenmyklasse definiert", ansonsten Ausgabe "Klasse Myclass ist nicht definiert".

Es ist zu beachten, dass PHP bei $ autoload auf true versucht, es zu laden, wenn die Klasse nicht geladen wurde. Standardmäßig versucht PHP, Klassen mit einem Autoloading -Mechanismus wie spl_autoload_register () zu laden.


2. Schnittstelle_Exists -Funktion

Ähnlich wie bei Class_Exists wird Interface_Exists verwendet, um zu überprüfen, ob eine Schnittstelle definiert ist. Es gibt wahr oder falsch zurück und gibt an, ob die angegebene Schnittstelle vorhanden ist.

Grammatik:
 <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 : Der zu überprüfende Schnittstellename muss eine Zeichenfolge sein.

  • $ autoload : Ob automatisches Laden aktiviert werden soll (Standard ist wahr ). Wenn er auf False gesetzt ist, versucht PHP nicht, die Schnittstelle automatisch zu laden.

Beispiel:
 <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">'Schnittstelle MyInterface Definiert'</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">'Schnittstelle MyInterface Undefiniert'</span></span><span>;
}
</span></span>

In diesem Beispiel prüft Interface_Exists , ob die MyInterface -Schnittstelle definiert ist. Wenn definiert wird, ist die Ausgabe "Schnittstelle myInterface definiert", ansonsten Ausgabe "Schnittstelle myInterface ist nicht definiert".


3.. Der Unterschied zwischen class_exists und interface_exists

Obwohl Class_Exists und interface_exists sehr ähnlich sind, gibt es zwischen ihnen wesentliche Unterschiede:

  • Überprüfen Sie die anderen Ziele :

    • Class_exists werden verwendet, um zu überprüfen, ob eine Klasse definiert wurde.

    • Interface_Exists werden verwendet, um zu überprüfen, ob eine Schnittstelle definiert ist.

  • Verschiedene Verwendungen :

    • Klassen sind normalerweise Vorlagen von Objekten und haben die Fähigkeit zu instanziieren.

    • Eine Schnittstelle ist eine Konvention, die Funktionen angibt, die von einer Klasse implementiert werden müssen, aber nicht instanziiert werden können.

  • Auswirkungen der automatischen Belastung :

    • Beide Funktionen unterstützen Autoloadparameter . Wenn sie auf True gesetzt sind, versucht PHP, undefinierte Klassen oder Schnittstellen automatisch zu laden.

    • Der Unterschied besteht darin, dass die automatische Belastung von Klassen normalerweise von Klassenladern (wie spl_autoload_register () ) behandelt wird, während das Laden von Schnittstellen relativ selten ist, da Schnittstellen normalerweise nicht wie Klassen instanziiert.


4. Verwenden Sie den Szenario -Vergleich

In der tatsächlichen Entwicklung müssen wir normalerweise beurteilen, ob sie basierend auf verschiedenen Szenarien class_exists oder interface_exists verwenden sollen.

  • Verwenden von class_exists :

    • Bestimmt, ob eine Klasse definiert oder geladen wurde und normalerweise zur Instanziierung von Klassen verwendet wurde.

    • Unter dem automatischen Lademechanismus wird diese Funktion normalerweise verwendet, um zu überprüfen, ob die Klasse geladen wurde, um eine doppelte Belastung oder Instanziierung zu verhindern.

    Beispiel:

     <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">// 处理UndefiniertArt的情况</span></span><span>
    }
    </span></span>
  • Verwenden von interface_exists :

    • Bestimmen Sie, ob eine Grenzfläche definiert ist und normalerweise in polymorphen und Abhängigkeitsinjektionsszenarien verwendet wird.

    • Bei der Ermittlung, ob eine Klasse eine Schnittstelle implementiert hat, können Sie zuerst Interface_exists verwenden, um festzustellen, ob die Schnittstelle bereits vorhanden ist, und dann feststellen, ob die Klasse die Schnittstelle implementiert hat.

    Beispiel:

     <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">'Protokollinformationen'</span></span><span>);
    }
    </span></span>