Вы должны рассмотреть это с точки зрения пользователя класса.Предположим, что $foo
имеет class Foo
, и у вас есть этот код:
if(isset($foo->bar)) {
var_dump($foo->bar); // #1
}
else {
// $foo->bar is "not set", right?
$x = $foo->bar;
var_dump($x); // #2
}
Риторические вопросы: вы ожидаете, что № 1 когда-либо напечатает null
?Вы ожидаете, что # 2 напечатает что-нибудь кроме null
?
Конечно, нет.Если бы это работало так, то пользователи class Foo
потратили бы большую часть своего рабочего дня, проклиная автора.
Если предположить, что я вас убедил, довольно просто начать с желаемого поведения и вернуться к тому, какэто должно быть достигнуто, а именно реализовать __isset
так:
public function __isset($prop) {
$val = $this->$prop;
return isset($val);
}