With traditional error handling, there probably isn't a better approach. Under PSR-X you could do:

```php
public function exists($key)
{
    $cacheFile = $this->getCacheFile($this->buildKey($key));

    $mtime = null;
    try {
        $mtime = filemtime($cacheFile);
    } catch (ErrorException $e) {
        return false;
    }

    return $mtime > time();
}
```

It's more verbose obviously, but it's also much clearer about what happens in an error condition. As an added bonus, your test coverage should be actually able to tell you when you don't have a test for the error condition, which can be very valuable.