On 9 March 2016 at 08:08, Marco Pivetta <ocram...@gmail.com> wrote: > On 9 March 2016 at 14:03, Pierrick Charron <pierr...@adoy.net> wrote: > >> Hi Derick >> >> I agree that most of the time the best solution is to implement a clean >> exception hierarchy but as stated in the RFC : >> >> "A solution to fix this problem on the user level would be to implement a >> common interface for ExceptionType1 and ExceptionType2 and catch it. >> However, this is only possible when you control the exception hierarchy in >> your own code, but not possible when you don't control the code." >> > > I understand the use-case, but I don't see it as a widespread scenario. In > most cases, I've been doing something like following: > > I agree that this the RFC will not get the oscar for feature of the year, but I think it will lead in those few use-case to more readable code.
> public function stuff() > { > try { > $this->willFail(); > } catch (FirstException $e) { > $this->handleFailure($e); > } catch (SecondException $e) { > $this->handleFailure($e); > } catch (ThirdException $e) { > $this->handleFailure($e); > } > } > > The thing I don't like about this approach is that I have to read the code and double check to make sure that the catch statement call the same method. For the amount of work that needs to be done in the Engine (see the patch attached to the RFC) this is far more readable and it is clear that the code to handle those 3 exceptions is the exact same one. And if the code of handleFailure is small you can even put it at this single place. public function stuff() { try { $this->willFail(); } catch (FirstException | SecondException | ThirdException $e) { $this->handleFailure($e); } } Even then, this is a rare eventuality, and as pointed out above, usually > fixed when wrapping exceptions correctly, if you have control over the > exception types). > Seems way below the 80/20 use-case to me, and introduces syntax changes as > well. > > Cheers, > > Marco Pivetta > > http://twitter.com/Ocramius > > http://ocramius.github.com/ > >