Je comprends que PHP n'a pas de variable d'objet pur, mais je veux vérifier si une propriété est dans l'objet ou la classe donnée.
$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 la variable a
existe dans un objet:
if ('a' in ob)
En PHP, peut-on faire quelque chose comme ça?
Merci beaucoup pour votre conseil.
if (property_exists($ob, 'a'))
if (isset($ob->a))
isset () retournera false si la propriété est null
Exemple 1:
$ob->a = null
var_dump(isset($ob->a)); // false
Exemple 2:
class Foo
{
public $bar = null;
}
$foo = new Foo();
var_dump(property_exists($foo, 'bar')); // true
var_dump(isset($foo->bar)); // false
Pour vérifier si la propriété existe et si elle est également nulle, vous pouvez utiliser la fonction property_exists()
.
Docs: http://php.net/manual/en/function.property-exists.php
Property_exists (), contrairement à isset (), renvoie TRUE même si la propriété a la valeur NULL.
bool property_exists (mixed $ class, string $ property)
Exemple:
if (property_exists($testObject, $property)) {
//do something
}
Ni isset ou property_exists ne fonctionne pour moi.
J'ai fini par aller avec:
$exists = array_key_exists($property, get_object_vars($obj));
Exemple:
class Foo {
public $bar;
function __construct() {
$property = 'bar';
isset($this->$property); // FALSE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // TRUE
unset($this->$property);
isset($this->$property); // FALSE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // FALSE
$this->$property = 'baz';
isset($this->$property); // TRUE
property_exists($this, $property); // TRUE
array_key_exists($property, get_object_vars($this)); // TRUE
}
}
Si vous voulez savoir si une propriété existe dans une instance d'une classe que vous avez définie, combinez simplement property_exists()
avec isset()
.
public function hasProperty($property)
{
return property_exists($this, $property) && isset($this->$property);
}
echo $person->middleName ?? 'Person does not have a middle name';
OR
if($person->middleName ?? false) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Explication
Le moyen traditionnel PHP de vérifier l'existence de quelque chose consiste à faire:
if(isset($person->middleName)) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
OU pour une manière plus spécifique à la classe:
if(property_exists($person, 'middleName')) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Ce sont deux choses bien dans les déclarations longues, mais dans les déclarations ternaires, elles deviennent inutilement lourdes isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Vous pouvez également y parvenir uniquement avec l'opérateur ternaire, tel que so echo $person->middleName ?: 'Person does not have a middle name';
, mais si la valeur n'existe pas (n'est pas définie), une E_NOTICE est générée et ce n'est pas la meilleure pratique. Si la valeur est null
, l'exception ne sera pas levée.
C'est pourquoi l'opérateur ternaire est à la rescousse, ce qui en fait une réponse simple:
echo $person->middleName ?? 'Person does not have a middle name';
Pour vérifier si quelque chose se termine, vous pouvez utiliser la fonction PHP isset () voir php.net . Cette fonction vérifiera si la variable est définie et n'est pas NULL.
Exemple:
if(isset($obj->a))
{
//do something
}
Si vous devez vérifier si une propriété existe dans une classe, vous pouvez utiliser la fonction de construction property_exists ()
Exemple:
if (property_exists('class', $property)) {
//do something
}