Тестирование, если свойство существует
Я читал в php docs, что isset()
быстрее, чем property_exists()
, и мы должны использовать комбинацию обоих вроде
if (isset($this->fld) || property_exists($this, 'fld')) {
Но почему я не могу просто использовать isset?
if (isset($this->fld)) {
Ответы
Ответ 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, если вы спросите его о таких свойствах.