On Thu, Dec 24, 2015 at 2:40 PM, Bronisław Białek <afte...@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

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to