Position actuelle: Accueil> Derniers articles> Quelle est la différence entre class_exists et interface_exists? Analyse comparative du jugement et de la classe entre l'interface PHP et la classe

Quelle est la différence entre class_exists et interface_exists? Analyse comparative du jugement et de la classe entre l'interface PHP et la classe

gitbox 2025-07-02

1. CLASS_EXISTS FONCTION

CLASS_EXISTS est une fonction utilisée dans PHP pour vérifier si une classe spécifiée a été définie. Renvoie true si la classe est définie, sinon renvoyez false .

grammaire:
 <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 : le nom de classe à vérifier doit être une chaîne.

  • $ Autoload : s'il faut activer le chargement automatique (par défaut est vrai ). Si réglé sur False , PHP n'essaiera pas de charger automatiquement la classe.

Exemple:
 <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">'gentil MyClass Défini'</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">'gentil MyClass Indéfini'</span></span><span>;
}
</span></span>

Dans l'exemple ci-dessus, les class_existes sont utilisés pour vérifier si MyClass existe déjà. S'il est présent, la sortie "classe MyClass est définie", sinon la sortie "Class MyClass n'est pas définie".

Il convient de noter que lorsque $ Autoload est défini sur true , PHP essaiera de le charger si la classe n'a pas été chargée. Par défaut, PHP tente de charger des classes à l'aide d'un mécanisme de mise en œuvre de mise en œuvre tel que SPL_AUTOLOAD_REGISTER () .


2. Interface_exists Fonction

Semblable à class_exists , Interface_exists est utilisé pour vérifier si une interface est définie. Il renvoie vrai ou faux , indiquant si l'interface spécifiée existe.

grammaire:
 <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 : le nom d'interface à vérifier doit être une chaîne.

  • $ Autoload : s'il faut activer le chargement automatique (par défaut est vrai ). Si réglé sur False , PHP n'essaiera pas de charger automatiquement l'interface.

Exemple:
 <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">'interface MyInterface Défini'</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">'interface MyInterface Indéfini'</span></span><span>;
}
</span></span>

Dans cet exemple, Interface_Exists vérifie si l'interface MyInterface est définie. S'il est défini, la sortie "L'interface MyInterface est définie", sinon la sortie "L'interface MyInterface n'est pas définie".


3. La différence entre class_exists et interface_exists

Bien que les class_exists et interface_exists soient très similaires, il existe des différences essentielles entre elles:

  • Vérifiez les cibles différentes :

    • CLASS_EXISTS est utilisé pour vérifier si une classe a été définie.

    • Interface_exists sont utilisés pour vérifier si une interface est définie.

  • Utilisations différentes :

    • Les classes sont généralement des modèles d'objets et ont la capacité d'instancier.

    • Une interface est une convention qui spécifie les fonctions qui doivent être implémentées par une classe, mais ne peuvent pas être instanciées.

  • Impact du chargement automatique :

    • Les deux fonctions prennent en charge les paramètres Autoload . S'il est défini sur true , PHP tente de charger automatiquement des classes ou des interfaces non définies.

    • La différence est que le chargement automatique des classes est généralement géré par les chargeurs de classe (tels que SPL_AUTOLOAD_REGISTER () ), tandis que le chargement des interfaces est relativement rare car les interfaces n'instancient généralement pas comme des classes.


4. Utiliser la comparaison du scénario

Dans le développement réel, nous devons généralement juger de l'utilisation de class_exists ou d'interface_existes en fonction de différents scénarios.

  • Utilisation de class_exists :

    • Détermine si une classe a été définie ou chargée, généralement utilisée pour l'instanciation des classes.

    • Sous le mécanisme de chargement automatique, cette fonction est généralement utilisée pour vérifier si la classe a été chargée pour empêcher le chargement ou l'instanciation en double.

    Exemple:

     <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">// 处理Indéfinigentil的情况</span></span><span>
    }
    </span></span>
  • Utilisation d'interface_exists :

    • Déterminez si une interface est définie, généralement utilisée dans les scénarios d'injection polymorphe et de dépendance.

    • Lors de la détermination de si une classe a implémenté une interface, vous pouvez d'abord utiliser l'interface_exists pour déterminer si l'interface existe déjà, puis déterminer si la classe a implémenté l'interface.

    Exemple:

     <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">'Journaliser les informations'</span></span><span>);
    }
    </span></span>