Comment vérifier qu'un objet est vide en PHP?
Comment savoir si un objet est vide ou n'est pas en PHP.
Voici le code dans lequel $obj
est tenue de données XML. Comment puis-je vérifier si elle est vide ou pas?
Mon code:
$obj = simplexml_load_file($url);
- double possible de PHP objet holding de données XML
- double possible de Comment faire pour vérifier si l'objet est vide en PHP?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez convertir un tableau et ensuite vérifier si il est vide ou n'est pas
Edit: Seule ligne typecasting, comme ci-dessous, ne fonctionne pas en PHP 5.4:
empty($var)
équivalent à(!isset($var) || !$var)
. Vous pouvez remplacer votreempty($arr)
s avec!$arr
depuisarray() == FALSE
empty((array) $obj)
ne fonctionne pas en PHP 5.4+ n'a rien à voir avec typecasting sur une seule ligne. Vous obtenez le message d'erreur parce queempty()
prend une référence pour les variables qui lui sont transmis, et il ne peut pas obtenir une référence lorsque typecasting à moins que vous premier magasin que typecasted variable dans une autre variable. Il le fait à cause de ce que j'ai décrit dans mon précédent commentaire. C'est plutôt frustrant que c'est la accepté de répondre car cela peut amener les gens à croire queempty()
vérifie si un tableau est "vide", ce qui n'est pas vrai - c'est juste un effet secondaire de ce qu'il fait réellement.Modifier: je ne savais pas qu'ils voulaient précisément de vérifier si un objet SimpleXMLElement est vide. J'ai quitté la vieille réponse ci-dessous
Mise À Jour De La Réponse (SimpleXMLElement):
Pour SimpleXMLElement:
Si par vide vous dire n'a pas de propriétés:
OU
Si SimpleXMLElement est un niveau profond, et par vide vous fait dire qu'il n'a que des propriétés PHP considère falsey (ou pas de propriétés):
Si SimpleXMLElement est à plusieurs niveaux de profondeur, vous pouvez commencer par en la convertissant en une pure tableau:
Vieille Réponse (simple object):
Si vous voulez vérifier si un objet simple (type
stdClass
) est complètement vide (pas de clés/valeurs), vous pouvez effectuer les opérations suivantes:Source: http://php.net/manual/en/language.oop5.object-comparison.php
Modifier: ajout de l'exemple
PHP Warning: Uncaught Error: Call to undefined method stdClass::count()
->count()
est spécifiquement pour les instances deSimpleXMLElement
et pas pour les instances destdClass
. Je crois que tout cela fonctionne encore dans PHP7.2.Vous pouvez lancer votre objet dans un tableau, et de tester son compte comme suit:
Imaginez si l'objet n'est pas vide et d'une manière assez grand, pourquoi auriez-vous des déchets les ressources nécessaires pour la convertir en tableau ou sérialiser...
C'est une solution très simple-je utiliser en JavaScript. Contrairement à la solution mentionnée qui jette un objet de tableau et vérifier si elle est vide, ou encoder en JSON, cette fonction simple est très efficace concernant l'utilisation de ces ressources pour effectuer une tâche simple.
La solution fonctionne de manière très simple: Il l'habitude de saisir une boucle foreach, si l'objet est vide et il sera de retour
true
. Si elle n'est pas vide, il entrera dans laforeach
boucle et retourfalse
tout de suite, ne passant pas par le biais de l'ensemble.Une autre solution possible qui n'a pas besoin de casting pour
array
:À l'aide de
empty()
ne fonctionne pas comme d'habitude lorsque vous l'utilisez sur un objet, parce que la__isset()
la surcharge de méthode sera appelée au lieu de cela, s'il est déclaré.Par conséquent, vous pouvez utiliser
count()
(si l'objet est Dénombrable).Ou en utilisant
get_object_vars()
, par exempleil n'y a pas unique moyen sûr de vérifier si un objet est vide
php count() convertit de tableau, mais le casting est possible de produire un tableau vide, dépend de la manière dont l'objet est mis en œuvre (extensions' objets sont souvent touchés par ces questions)
dans votre cas, vous devez utiliser $obj->count();
http://it.php.net/manual/en/simplexmlelement.count.php
(qui n'est pas php count http://www.php.net/count )
Si vous lancez quelque chose en PHP comme un (bool), il vous dira tout de suite si l'élément est un objet de type primitif ou null. Utilisez le code suivant:
Si un objet est "vide" ou pas est une question de définition, et parce qu'il dépend de la nature de l'objet de la classe représente, c'est pour la classe à définir.
PHP lui-même considère que chaque instance d'une classe n'est pas vide.
Il ne peut y avoir une définition générique pour un objet "vide". Vous pourriez dire dans l'exemple ci-dessus le résultat de
empty()
devrait êtretrue
, parce que l'objet ne représente pas tout le contenu. Mais comment est-PHP pour savoir? Certains objets ne sont jamais destinées à représenter le contenu (pensez à les usines par exemple), d'autres représentent toujours une valeur raisonnable (penseznew DateTime()
).En bref, vous aurez à venir avec vos propres critères pour un objet spécifique, et de les tester en conséquence, soit de l'extérieur à l'objet ou à partir d'un auto-écrit
isEmpty()
méthode dans l'objet.ou
J'ai été en utilisant une fonction json_decode d'une chaîne de caractères dans la requête post. Aucun des ci-dessus a fonctionné pour moi, en fin de compte j'ai utilisé ceci: