7
votes

Comment vérifier si le tableau est une collection d'objet spécifique?

Dans ma classe, j'ai une méthode qui attend en tant que tableau, et ce tableau doit être utilisé différemment en fonction du type de collecte. Les articles de matrice doivent être des objets et je dois savoir quelle instance de classe ces objets sont.

Par exemple: dans le tableau ($ obj1, $ obj2), je dois vérifier l'instance de ces objets, quelle classe ils étaient. Créé à partir de.

ici Quelqu'un de code: xxx

ou peut-être: xxx

Je n'ai besoin que vérifier le type de collecte de ce tableau. Je sais que je peux y introduire, mais y a-t-il un meilleur moyen de le faire?


3 commentaires

Non, pas de meilleure façon que vous montrez du code avec certaines données d'entrée + ce que vous avez essayé jusqu'à présent + ce que vous attendiez + où vous avez bloqué.Merci.


Si vous construisez vous-même les collections et pouvez vous assurer que tous les objets d'une collection sont la même classe, testez simplement le premier


Tout @Analivetodie a dit. J'ai bownvoché jusqu'à ce que la question devienne responsable.


5 Réponses :


0
votes

Si vous utilisez un tableau (pas objet) comme collection, vous n'avez pas d'autre choix, sauf pour vérifier les éléments de réseau.


0 commentaires

0
votes

La vérification de l'instance de vérification signifie passer par chaque type jusqu'à ce que vous atteigniez la bonne. Au lieu de cela, essayez get_class ($ objet) et utilisez une instruction de commutation pour déterminer quoi faire ensuite.

ou, créez une interface avec un getwateDeNeed () méthode et dans chacun des types d'objets correspondants, mettez-le en œuvre. De cette façon, chaque objet, peu importe ce qui est une instance de getwhaTraTeNeedinterface . Recherchez les «modèles de stratégie».


1 commentaires

ouais .. je peux utiliser get_class alors



0
votes

Il y a une autre façon d'y parvenir:

    public function convertDataToInsert(ConvertibleDataCollection $dataCollection)
    {
        return $dataCollection->convert();
    }


1 commentaires

Veuillez ajouter quelques explications supplémentaires à votre réponse, de sorte que d'autres puissent en apprendre. Où dans tout ce code est le chèque caché?



0
votes

Un collègue m'a montré un moyen facile de vérifier, si un tableau contient des instances d'une classe uniquement: xxx

Voici un exemple avec la sortie: https://3v4l.org/1ivg9


0 commentaires

1
votes

Utilisez un filtre de matrice:

if (count(array_filter($data, function ($entry) {
        return !($entry instanceof CriterioDigital);
})) > 0) {
    throw new \DomainException('an array of CriterioDigital must be provided');
}


0 commentaires