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

Тестирование, если свойство существует

Я читал в php docs, что isset() быстрее, чем property_exists(), и мы должны использовать комбинацию обоих вроде

if (isset($this->fld) || property_exists($this, 'fld')) { 

Но почему я не могу просто использовать isset?

if (isset($this->fld)) {
4b9b3361

Ответ 1

Потому что property_exists сообщит вам, если его даже определенное свойство класса/объекта, где as isset не делает этого различия. например:

class A {
  protected $hello;
}

class B {

}

используя property_exists($this, 'hello') в классе A, вернет true, а использование в класса B вернет false. isset вернет false в обоих случаях.

Ответ 2

Это зависит от того, как выполняется ваша программа, но если вы прочитаете комментарии в руководстве, это поможет объяснить специфические особенности функции.

http://php.net/manual/en/function.property-exists.php

Важная часть здесь:

В документации не учитывается важный случай новых свойств, которые вы добавляете к объектам во время выполнения. Фактически, property_exists вернет true, если вы спросите его о таких свойствах.