Реализация обязательно будет зависеть от задачи, и это единственный критерий при реализации логики метода. Логично или нет пользователя не будет волновать т.к.
var_dump(isset($foo->bar));
не зависимо от реализации
__isset($name) {return isset($this->data[$name]);}
или
__isset($name) {return array_key_exists($name, $this->data)}
Invis1ble, класс в примере
class Container {
protected $_data = [];
public function __isset($name) {
return isset($this->_data[$name]);
}
}
$container = new Container;
var_dump(isset($container->foo));
в геттере вы ведь не собираетесь обращаться к несуществующим элементам $_data. Скорее всего, будет брошено исключение или вернете null (опять же в зависимости от требований). Тогда следующий код будет логичным вне зависимости от деталей реализации:
if (isset($container->foo)) {
}