>
> If something is required, one cannot do without it, so there's only one
> course of action, namely to bail out.
What about gracefully bailing out, like showing that composer dependencies
have to be installed?
It's just like a method call. Usually you expect a return value, unless
there's an exception.
> In my opinion, this is the least
> surprising way to handle missing required files, especially as it always
> has been that way (consider the potential BC break).
>
As already pointed out, there's no BC break, except for catch 'em all. It's
also not surprising,
as require + parse error already throws an error instead of stopping with a
fatal error.
It's surprising that this one still fatals.
> Or do you really prefer to be able to do
>
> try {
> require $fileName;
> } catch (Error $e) {
> echo "Oops, maybe deleted? " . $e;
> }
> functionDefinedInFileName();
>
Yes, I really prefer that. Not that code exactly, but being able to write:
try {
require $config;
} catch (ParseError $e) {
}
> and get a fatal error that function no() is undefined? I'd rather get a
> fatal error that the required file couldn't be opened in the first place.
>
> If, however, a file is not strictly required, one can (and in my
> opinion, should) `include` the file. And yes, there's no absolutely
> failsafe way to do this without risking a warning or using the @
> operator, but that affects other filesystem functions (e.g.
> file_get_contents() and fopen()) as well. Frankly, I can't see a single
> good reason to replace the fatal error with an exception for require,
> but leave include etc. alone. And if include would throw an exception,
> I don't see the use of changing require at all.
>
> --
> Christoph M. Becker
>