Dans la programmation orientée objet PHP, il est souvent nécessaire de déterminer si un objet appartient à une certaine classe ou de déterminer la relation au niveau de la classe de l'objet. is_a () et get_class () sont deux fonctions très couramment utilisées, combinées avec elles, vous pouvez juger efficacement la relation de hiérarchie de classe d'un objet. Cet article introduira l'utilisation de ces deux fonctions en détail et utilisera des exemples pour illustrer comment les utiliser ensemble.
La fonction is_a () est utilisée pour vérifier si un objet est une instance d'une classe, ou si la classe de l'objet hérite de cette classe. Sa syntaxe est la suivante:
bool is_a(object $object, string $class_name, bool $allow_string = false)
$ objet : l'objet à vérifier.
$ class_name : nom de classe cible.
$ allow_string : si vrai , le premier argument est autorisé à être une chaîne de nom de classe, pas seulement un objet.
IS_A () Vérifiera la classe à laquelle appartient l'objet et sa chaîne de classe parent. Tant que l'un d'eux est atteint, il reviendra vrai .
La fonction get_class () renvoie le nom de classe réel d'un objet. La syntaxe est la suivante:
string get_class(object $object)
Il ne renvoie que le nom de classe actuel de l'objet et n'implique pas la classe parent.
L'utilisation de IS_A () à elle seule a été en mesure de déterminer si un objet appartient à une certaine classe ou à sa classe parent. Mais parfois, nous devons juger:
Si l'objet est une classe spécifique (l'héritage n'est pas pris en compte)
Que l'objet soit une sous-classe d'une certaine classe ou de cette classe
Déterminer les différences hiérarchiques dans les relations de succession
À l'heure actuelle, la combinaison de get_class () et is_a () peut implémenter de manière flexible une variété de logiques de jugement.
Supposons qu'il y ait la structure de classe suivante:
class Animal {}
class Dog extends Animal {}
class Poodle extends Dog {}
$poodle = new Poodle();
if (is_a($poodle, 'Dog')) {
echo 'C'est unDogouDogSous-classe des instances de';
}
Sortir:
C'est unDogouDogSous-classe des instances de
if (get_class($poodle) === 'Dog') {
echo 'C'est unDogExemples de classe';
} else {
echo 'NonDogInstance de classe';
}
Sortir:
NonDogInstance de classe
if (is_a($poodle, 'Dog') && get_class($poodle) !== 'Dog') {
echo 'C'estDogSous-classe des instances de,但NonDogClasse elle-même';
}
Sortir:
C'estDogSous-classe des instances de,但NonDogClasse elle-même
Dans une logique commerciale, cela peut être nécessaire:
Exécuter la logique pour une classe elle-même
Exécuter une logique différente pour les sous-classes
Le jugement conjoint de IS_A () et get_class () peut être utilisé pour le contrôler avec précision.
IS_A () prend en charge le troisième paramètre pour permettre le jugement de nom de classe de chaîne, ce qui est plus flexible.
get_class () accepte uniquement les paramètres d'objet et ne peut pas passer directement les chaînes.
Les noms de classe sont sensibles à la casse et font attention à la cohérence du cas.
Après PHP 5.3.0, IS_A () peut accepter les chaînes comme le premier paramètre et être utilisée avec le troisième paramètre True .
Grâce à la combinaison de IS_A () et get_class () , vous pouvez juger de manière flexible et précise de la relation de hiérarchie de classe dans PHP:
is_a () détermine s'il appartient à une certaine classe ou à sa sous-classe.
get_class () détermine le nom de classe spécifique de l'objet.
L'utilisation conjointe peut distinguer les catégories spécifiques des catégories d'héritage pour répondre aux besoins commerciaux diversifiés.