PHP проверяет, существует ли свойство в объекте или классе
Я понимаю, что PHP не имеет чистой объектной переменной, но я хочу проверить, находится ли свойство в данном объекте или классе.
$ob = (object) array('a' => 1, 'b' => 12);
или
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
на Ж. С., я могу написать это, чтобы проверить, если переменная объект:
if ('a' in ob)
на PHP, можно ли сделать что-нибудь подобное?
большое спасибо за Ваши советы.
5 ответов:
property_exists (mixed $class , string $property )
if (property_exists($ob, 'a'))
isset( mixed $var [, mixed $... ])
if (isset($ob->a))
isset () вернет false, если свойство null
Пример 1:
$ob->a = null var_dump(isset($ob->a)); // false
Пример 2:
class Foo { public $bar = null; } $foo = new Foo(); var_dump(property_exists($foo, 'bar')); // true var_dump(isset($foo->bar)); // false
чтобы проверить, существует ли свойство и если оно равно null, вы можете использовать функцию
property_exists()
.Docs:http://php.net/manual/en/function.property-exists.php
в отличие от isset(), property_exists() возвращает TRUE, даже если свойство имеет значение NULL.
пример:
if (property_exists('class', $property)) { //do something }
ни isset и или property_exists работать на меня.
- isset и возвращает false, если свойство существует, но имеет значение NULL.
- property_exists возвращает true, если свойство является частью определения класса объекта, даже если она была удалена.
Я закончил тем, что пошел с:
$exists = array_key_exists($property, get_object_vars($obj));
пример:
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 } }
Если вы хотите знать, существует ли свойство в экземпляр класса, который вы определили, просто объедините
property_exists()
Сisset()
.public function hasProperty($property) { return property_exists($this, $property) && isset($this->$property); }
чтобы проверить, если что-то выходит, вы можете использовать функцию PHP isset () см php.net. Эта функция проверяет, установлена ли переменная и не является нулевой.
пример:
if(isset($obj->a)) { //do something }
Если вам нужно проверить, существует ли свойство в классе, то вы можете использовать функцию build in property_exists ()
пример:
if (property_exists('class', $property)) { //do something }