Dans la programmation PHP, le polymorphisme est une caractéristique importante de la programmation orientée objet. Le polymorphisme permet d'appeler des objets de différentes classes avec une interface unifiée, améliorant ainsi la flexibilité du code et la maintenabilité. Afin de mettre en œuvre le polymorphisme, nous devons souvent déterminer si un objet appartient à une certaine classe ou si une interface est implémentée. PHP fournit une variété de façons de compléter ce jugement, parmi lequel la fonction IS_A () est l'une des méthodes les plus couramment utilisées et directes.
La fonction is_a () est utilisée pour vérifier si un objet appartient à une certaine classe, ou si la classe de l'objet hérite de cette classe, ou même implémente une interface. Le prototype de fonction est le suivant:
bool is_a(object $object, string $class_name, bool $allow_string = false)
$ objet : l'instance d'objet à détecter.
$ class_name : le nom de classe ou le nom de l'interface à juger.
$ allow_string (php 5.3.0+): si le premier paramètre est autorisé à être le nom de classe de chaîne (généralement non utilisé).
IS_A () Renvoie True lorsqu'un objet appartient à une classe spécifiée ou à sa sous-classe, ou lorsqu'une interface spécifiée est implémentée, sinon il renvoie False .
Supposons que nous ayons une interface dessinable qui définit un comportement de dessin. Ensuite, il y a deux classes Circle et Square , qui implémentent l'interface dessinable .
<?php
interface Drawable {
public function draw();
}
class Circle implements Drawable {
public function draw() {
echo "Drawing a circle.\n";
}
}
class Square implements Drawable {
public function draw() {
echo "Drawing a square.\n";
}
}
function renderShape($shape) {
if (is_a($shape, 'Drawable')) {
$shape->draw();
} else {
echo "The object is not drawable.\n";
}
}
$circle = new Circle();
$square = new Square();
$stdObj = new stdClass();
renderShape($circle); // Sortir: Drawing a circle.
renderShape($square); // Sortir: Drawing a square.
renderShape($stdObj); // Sortir: The object is not drawable.
?>
Ici, nous utilisons IS_A ($ forme, «Drawable») pour déterminer si $ Shape implémente l'interface dessinable , déterminant ainsi s'il faut appeler la méthode Draw () .
IS_A () et les fonctions de l'opérateur d'instance et d'instance sont similaires, et les deux peuvent juger la relation entre les objets et les classes ou les interfaces. Mais il y a quelques différences:
IS_A () est une fonction qui prend en charge la transmission dynamique dans les chaînes de nom de classe, adaptées aux scénarios où vous devez juger en fonction des noms de classe variables.
InstructionOf est une structure linguistique, avec une syntaxe plus propre et des performances légèrement meilleures, mais le nom de classe ne peut pas être passé dynamiquement (PHP 5.5+ prend en charge le nom de la classe variable).
is_a () peut accepter les noms de classe sous forme de chaîne (lorsque le troisième paramètre le permet), l'instance ne peut pas.
Exemple de comparaison:
if (is_a($obj, 'MyClass')) { ... }
if ($obj instanceof MyClass) { ... }
IS_A () ne peut être utilisé que pour un jugement d'objet et ne peut pas être utilisé pour juger des types de variables ordinaires.
Pour les jugements de mise en œuvre de l'interface, IS_A () s'applique également.
PHP 7.2+ est recommandé d'utiliser IS_A () , en particulier pour les noms de classe dynamiques pour juger plus facilement.
L'utilisation de la fonction is_a () est une méthode concise pour déterminer si un objet appartient à une certaine classe ou implémente une certaine interface. Il joue un rôle important dans la programmation polymorphe. L'utilisation rationnelle d' Is_A () peut rendre le code plus flexible et extensible et améliorer la qualité de la programmation orientée objet.
Code Exemple de schéma d'adresse de démonstration:
$url = "https://m66.net/example-path";
echo "Exemple d'adresse de référence du code:" . $url;