Position actuelle: Accueil> Derniers articles> is_a () dans le mauvais ordre: les conséquences de l'inversion des paramètres de l'objet et du nom de classe

is_a () dans le mauvais ordre: les conséquences de l'inversion des paramètres de l'objet et du nom de classe

M66 2025-05-29

Dans PHP, la fonction is_a () est utilisée pour détecter si un objet appartient à une certaine classe ou sous-classe d'une classe. La syntaxe est la suivante:

 is_a(object $object, string $class_name, bool $allow_string = false): bool

Parmi eux, le premier paramètre doit être le nom de l'objet ou de l'objet, et le deuxième paramètre est le nom de classe. Si l'ordre de ces deux paramètres est inversé, qu'est-ce que le code aura? Cet article utilisera des exemples pour analyser les performances et les risques potentiels d' Is_A () lors de l'utilisation du mauvais ordre de paramètres.


Exemple d'utilisation correcte

Supposons qu'il y ait deux catégories:

 class Animal {}
class Dog extends Animal {}

$dog = new Dog();

var_dump(is_a($dog, 'Animal'));   // true,Dog Oui Animal Sous-classes de
var_dump(is_a($dog, 'Dog'));      // true,$dog Oui Dog Exemples

Dans ce code, IS_A ($ dog, 'animal') reviendra vrai , indiquant que l'objet $ dog appartient à la classe animale ou à sa sous-classe.


Exemple d'utilisation d'erreur: l'ordre des paramètres est inversé

Si vous écrivez l'ordre des paramètres à l'envers, par exemple:

 var_dump(is_a('Animal', $dog));  // Démonstration d'erreur

Que se passe-t-il à ce moment? Analysons:

  1. Le premier argument est la chaîne «animal» , pas l'objet.

  2. Le deuxième paramètre est l'objet $ chien , pas la chaîne de nom de classe.

Selon la définition de IS_A () , la fonction s'attend à ce que le premier paramètre soit un objet et que le deuxième paramètre est un nom de classe de chaîne, et l'ordre est inversé pour provoquer un décalage de type.


De vraies conséquences

  • PHP 7.2 et plus lancera des avertissements ou des erreurs , tels que:

 Warning: is_a() expects parameter 1 to be object, string given
  • La fonction renvoie fausse et ne peut pas être correctement jugée.

  • La logique du code échoue, entraînant un échec de jugement.

Exemple de code:

 $dog = new Dog();
var_dump(is_a('Animal', $dog)); // false,Et un avertissement

Cas spéciaux lorsque les chaînes sont autorisées comme le premier paramètre

is_a () permet au troisième paramètre $ allow_string d'être défini sur TRUE pour prendre en charge le premier paramètre passant dans la chaîne de nom de classe au lieu de l'objet:

 var_dump(is_a('Dog', 'Animal', true));  // true,Jugement Dog Oui否继承 Animal

Mais même dans ce cas, le deuxième paramètre doit toujours être le nom de classe de chaîne, et l'ordre inverse erre toujours:

 var_dump(is_a('Animal', $dog, true)); // Encore mal,Ordre des paramètres inversé

résumé

  • Le premier paramètre de la fonction is_a () doit être un objet (ou lorsque $ allow_string est vrai , c'est une chaîne de nom de classe), et le deuxième paramètre doit être une chaîne de nom de classe.

  • L'inversion de l'ordre des paramètres provoquera un décalage de type, PHP allera et reviendra faux , et le jugement sera invalide.

  • Une attention particulière doit être accordée à l'ordre des paramètres en développement pour éviter les vulnérabilités logiques difficiles à découvrir en raison des erreurs de transfert de paramètres.