Я читал в 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
Это зависит от того, как выполняется ваша программа, но если вы прочитаете комментарии в руководстве, это поможет объяснить специфические особенности функции.
В документации не учитывается важный случай новых свойств, которые вы добавляете к объектам во время выполнения. Фактически, property_exists вернет true, если вы спросите его о таких свойствах.