Je comprends que PHP n'a pas de variable objet pur, mais je veux vérifier si une propriété est dans l'objet ou la classe donné.
$ob = (object) array('a' => 1, 'b' => 12);
ou
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
Dans JS, je peux écrire ceci pour vérifier si une variable a
existe dans un objet:
if ('a' in ob)
En PHP, peut - on faire quelque chose comme ça?
Merci beaucoup pour votre conseil.
Réponses:
property_exists (mixte $ class, chaîne $ property)
isset (mixte $ var [, mixte $ ...])
Exemple 1:
Exemple 2:
la source
empty()
existe une meilleure solution?!empty($var)
?Pour vérifier si la propriété existe et si elle est également nulle, vous pouvez utiliser la fonction
property_exists()
.Documents: http://php.net/manual/en/function.property-exists.php
Contrairement à isset (), property_exists () renvoie TRUE même si la propriété a la valeur NULL.
Exemple:
la source
Ni isset ni property_exists ne fonctionnent pour moi.
J'ai fini par y aller avec:
Exemple:
la source
Solution
echo $person->middleName ?? 'Person does not have a middle name';
Pour montrer à quoi cela ressemblerait dans une instruction if pour plus de clarté sur la façon dont cela fonctionne.
Explication
La manière traditionnelle PHP de vérifier l'existence de quelque chose est de faire:
OU pour une manière plus spécifique à la classe:
Ce sont tous les deux très bien dans les déclarations de forme longue, mais dans les déclarations ternaires, ils deviennent inutilement encombrants comme ceci:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Vous pouvez également y parvenir avec juste l'opérateur ternaire comme ceci:
echo $person->middleName ?: 'Person does not have a middle name';
Mais ... si la valeur n'existe pas (n'est pas définie), elle lèvera un
E_NOTICE
et ce n'est pas la meilleure pratique. Si la valeur est,null
elle ne lèvera pas l'exception.Par conséquent, l'opérateur ternaire à la rescousse, ce qui en fait une petite réponse intéressante:
echo $person->middleName ?? 'Person does not have a middle name';
la source
Si vous voulez savoir si une propriété existe dans une instance d'une classe que vous avez définie, combinez simplement
property_exists()
avecisset()
.la source
property_exists($this, $property)
est un peu redondant ici, car votre code aura toujours le même résultat queisset($this->$property)
seul.isset()
il ne peut pas vous dire si une propriété est un vrai membre de la définition de classe. Je chercherai à nouveau plus tard pour m'en assurer.__get()
et surtout__isset()
des méthodes magiques, la sortie sera différente dans certains cas.Pour vérifier si quelque chose se termine, vous pouvez utiliser la fonction PHP isset () voir php.net . Cette fonction vérifie si la variable est définie et n'est pas NULL.
Exemple:
Si vous avez besoin de vérifier si une propriété existe dans une classe, vous pouvez utiliser la fonction intégrée property_exists ()
Exemple:
la source
L'utilisation de array_key_exists () sur des objets est obsolète dans php 7.4
Au lieu de cela, isset () ou property_exists () doivent être utilisés
référence: php.net
la source
Je mets juste mes 2 cents ici.
Compte tenu de la classe suivante:
ce qui suit se produira:
J'espère que cela aidera n'importe qui
la source