Подтвердить что ты не робот

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

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

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

или

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

В JS я могу написать это, чтобы проверить, существует ли переменная a в объекте:

if ('a' in ob)

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

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

4b9b3361

Ответ 2

Чтобы проверить, существует ли свойство и имеет ли оно значение null, вы можете использовать функцию property_exists().

Документы: http://php.net/manual/en/function.property-exists.php

В отличие от isset(), property_exists() возвращает TRUE, даже если свойство имеет значение NULL.

bool property_exists (смешанный класс $, строка $ свойство)

Пример:

if (property_exists($testObject, $property)) {
    //do something
}

Ответ 3

Для меня не работают 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
        }
    }

Ответ 4

Если вы хотите узнать, существует ли свойство в экземпляре класса, который вы определили, просто соедините property_exists() с isset().

public function hasProperty($property)
{
    return property_exists($this, $property) && isset($this->$property);
}

Ответ 5

Чтобы проверить, что что-то выходит, вы можете использовать функцию PHP isset() см. php.net. Эта функция проверяет, установлена ​​ли переменная и не является NULL.

Пример:

if(isset($obj->a))
{ 
  //do something
}

Если вам нужно проверить, существует ли свойство в классе, вы можете использовать функцию сборки property_exists()

Пример:

if (property_exists('class', $property)) {
    //do something
}

Ответ 6

echo $person->middleName?? 'Person does not have a middle name';

ИЛИ ЖЕ

if($person->middleName ?? false) {
    echo $person->middleName;
} else {
    echo 'Person does not have a middle name';
}

объяснение

Традиционный способ проверки существования PHP - это сделать:

if(isset($person->middleName)) {
    echo $person->middleName;
} else {
    echo 'Person does not have a middle name';
}

ИЛИ для более специфичного для класса способа:

if(property_exists($person, 'middleName')) {
    echo $person->middleName;
} else {
    echo 'Person does not have a middle name';
}

Оба они хороши в длинных выражениях, но в троичных выражениях они становятся излишне громоздкими isset($person->middleName)? echo $person->middleName: echo 'Person does not have a middle name'; isset($person->middleName)? echo $person->middleName: echo 'Person does not have a middle name';

echo $person->middleName?: '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';