PHP проверяет, существует ли свойство в объекте или классе


Я понимаю, что PHP не имеет чистой объектной переменной, но я хочу проверить, находится ли свойство в данном объекте или классе.

$ob = (object) array('a' => 1, 'b' => 12); 

или

$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;

на Ж. С., я могу написать это, чтобы проверить, если переменная объект:

if ('a' in ob)

на PHP, можно ли сделать что-нибудь подобное?

большое спасибо за Ваши советы.

5 67

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
}