Я понимаю, что PHP не имеет чисто объектной переменной, но я хочу проверить, находится ли свойство в данном объекте или классе.
$ob = (object) array('a' => 1, 'b' => 12);
или
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
В JS я могу написать это, чтобы проверить, a
существует ли переменная в объекте:
if ('a' in ob)
В PHP можно сделать что-нибудь подобное?
Большое спасибо за ваш совет.
Ответы:
property_exists (смешанный класс $, строка $ свойство)
isset (mixed $ var [, mixed $ ...])
Пример 1:
Пример 2:
источник
empty()
лучшее решение?!empty($var)
?Чтобы проверить, существует ли свойство и имеет ли оно значение null, вы можете использовать функцию
property_exists()
.Документы: http://php.net/manual/en/function.property-exists.php
В отличие от isset (), property_exists () возвращает TRUE, даже если свойство имеет значение NULL.
Пример:
источник
Ни isset, ни property_exists не работают для меня.
Я закончил тем, что пошел с:
Пример:
источник
Решение
echo $person->middleName ?? 'Person does not have a middle name';
Чтобы показать, как это будет выглядеть в операторе if, для большей ясности о том, как это работает.
объяснение
Традиционный способ проверки существования чего-либо на PHP заключается в следующем:
ИЛИ для более специфичного для класса способа:
Они оба хороши в длинных выражениях, но в троичных выражениях они становятся излишне громоздкими, например:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Вы также можете достичь этого только с помощью троичного оператора, например:
echo $person->middleName ?: 'Person does not have a middle name';
Но ... если значение не существует (не установлено), оно вызовет
E_NOTICE
и не является лучшей практикой. Если значение равно,null
оно не вызовет исключения.Поэтому троичный оператор на помощь делает этот аккуратный маленький ответ:
echo $person->middleName ?? 'Person does not have a middle name';
источник
Если вы хотите узнать, существует ли свойство в экземпляре класса, который вы определили, просто объедините
property_exists()
сisset()
.источник
property_exists($this, $property)
здесь отчасти избыточен, поскольку ваш код всегда будет иметь тот же результат, что иisset($this->$property)
один.isset()
не может сказать вам, является ли свойство истинным членом определения класса. Я посмотрю еще раз позже, чтобы убедиться.__get()
и, что более важно,__isset()
магические методы, результат будет отличаться в некоторых случаях.Чтобы проверить, завершается ли что-то, вы можете использовать функцию PHP isset (), см. Php.net . Эта функция проверит, установлена ли переменная и не имеет ли значение NULL.
Пример:
Если вам нужно проверить, существует ли свойство в классе, вы можете использовать встроенную функцию property_exists ()
Пример:
источник
Использование array_key_exists () для объектов устарело в php 7.4
Вместо этого следует использовать либо isset (), либо property_exists ()
ссылка: php.net
источник
Просто положил мои 2 цента здесь.
Учитывая следующий класс:
произойдет следующее:
Надеюсь, это поможет кому-нибудь
источник