Re: Multicatch RFC proposal
| From: | Sara Golemon | Date: | Thu, 24 Dec 2015 23:08:51 +0000 |
| Subject: | Re: Multicatch RFC proposal | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-89887@lists.php.net to get a copy of this message | ||
On Thu, Dec 24, 2015 at 2:40 PM, Bronisław Białek <after89@gmail.com> wrote:
> I've just created an RFC draft for catching multiple exception types
> in one catch statement:
> https://github.com/bronek89/php-multicatch-rfc
>
> I wrote RFC on github to check if there is any positive response from community.
>
> Basically it introduces possibility to write code such as:
>
> try {
> // ...
> } catch (DbException | ResourceNotFoundException $e) {
> throw new HttpException("not found", 404, $e);
> } catch (\Throwable $e) {
> throw new HttpException("fail", 500, $e);
> }
>
> Provided patch is my first experience with PHP source code, so it
> could be not perfectly written (or simply poor ;-) ) .
>
> What do you think about introducing that kind of feature into PHP?
>
I think introducing union types should be a prerequisite for this as
we don't want the much more widely impactful feature of arg/return
type hinting to be constrained by syntax we choose here (and making
them inconsistent would be even worse).
That said, from a general principle point of view, it certainly
doesn't seem unreasonable. In an own-codebase one would probably use
interfaces, have each exception implement the the common denominator
(INotFound or what-have-you), but in a world of foreign components
that's not always practical.
On the other hand, one could just catch a throwable and use a pattern like this:
} catch (\Throwable $e) {
switch (true) {
case ($e instanceof DbException):
case ($e instanceof ResourceNotFoundException):
throw new HttpException("not found", 404, $e);
default:
throw new HttpException("fail", 500, $e);
}
}
So I'm not personally going to get super excited about it, even if I
would vote in favor.
-Sara