La programmation orientée objet (POO) est une partie très importante de PHP. Déterminer si un objet appartient à une certaine classe ou à sa classe parent est une exigence commune dans le développement quotidien. PHP fournit deux fonctions intégrées très pratiques is_a () et get_parent_class () pour nous aider à atteindre cette fonction. Cet article introduira l'utilisation de ces deux fonctions en détail et démontrera à travers des exemples comment déterminer si un objet appartient à une certaine classe parent ou système d'hérédité.
La fonction is_a () est utilisée pour déterminer si un objet est une instance d'une certaine classe ou une instance de sous-classe de cette classe. Le prototype de fonction est le suivant:
bool is_a(object $object, string $class_name, bool $allow_string = false)
$ objet : l'instance d'objet qui doit être détectée.
$ class_name : le nom de classe spécifié (chaîne).
$ allow_string : paramètre facultatif, par défaut à false , s'il faut permettre le premier paramètre dans la chaîne de nom de classe (pas l'objet).
Return true si $ objet est une instance de $ class_name , ou une instance de sa sous-classe, autrement faux .
<?php
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
var_dump(is_a($dog, 'Animal')); // bool(true)
var_dump(is_a($dog, 'Dog')); // bool(true)
var_dump(is_a($dog, 'Cat')); // bool(false)
?>
Dans l'exemple ci-dessus, $ chien est un exemple de la classe de chiens , et le chien est une sous-classe d' animaux , il revient donc vrai lorsqu'il juge si $ dog est un type d'animal .
get_parent_class () est utilisé pour obtenir le nom de classe parent d'une classe ou d'un objet. Si la classe n'a pas de classe parent, false est renvoyé.
Prototype de fonction:
string|false get_parent_class(object|string $class)
Les paramètres peuvent être une instance d'objet ou une chaîne de nom de classe.
En appelant get_parent_class () récursivement, nous pouvons déterminer si un objet se trouve sur une certaine chaîne d'héritage.
<?php
class Vehicle {}
class Car extends Vehicle {}
class SportsCar extends Car {}
$sportsCar = new SportsCar();
$parent = get_parent_class($sportsCar); // Car
while ($parent !== false) {
echo $parent . PHP_EOL;
$parent = get_parent_class($parent);
}
// Sortir:
// Car
// Vehicle
?>
Supposons que nous voulons déterminer si un objet appartient à une classe de véhicule ou à une instance de sa sous-classe, nous pouvons effectuer une vérification récursive en combinaison avec get_parent_class () :
<?php
function isInstanceOfParent($object, $parentClass) {
$class = get_class($object);
if ($class === $parentClass) {
return true;
}
while ($parent = get_parent_class($class)) {
if ($parent === $parentClass) {
return true;
}
$class = $parent;
}
return false;
}
class Vehicle {}
class Car extends Vehicle {}
class SportsCar extends Car {}
$sportsCar = new SportsCar();
var_dump(isInstanceOfParent($sportsCar, 'Vehicle')); // bool(true)
var_dump(isInstanceOfParent($sportsCar, 'Car')); // bool(true)
var_dump(isInstanceOfParent($sportsCar, 'Animal')); // bool(false)
?>
IS_A () est une méthode concise pour déterminer si un objet est une certaine classe ou sa sous-classe, et convient au jugement direct.
get_parent_class () convient à l'obtention des informations de classe parent de la classe et peut être utilisée pour juger récursivement des chaînes d'héritage plus complexes.
Pour la plupart des scénarios, l'utilisation d'Is_A () est suffisamment simple et efficace.
La combinaison de get_parent_class () peut réaliser une logique de jugement de relation d'héritage plus flexible.
La maîtrise de ces deux fonctions peut vous aider à mieux contrôler et vérifier le type et la structure de succession des objets, et améliorer la robustesse et la maintenabilité de votre code.