PHP7 has introduced Throwable and Error. Among other things, this change means that Phabricator no longer prints out a lot of errors in development.
Throwable is a superclass, and Error and Exception subclass it.
Additionally, some error behaviors appear to have changed to "throw a Throwable" instead of whatever they used to do. On the balance, this is a good change, but it throws a bit of a wrench into the gears in the short term.
In practice, this means that code like this:
} catch (Exception $ex) { ... }
...no longer catches all exceptions.
In most cases, it is probably correct for us not to change things, but the top-level default exception handlers need to catch Throwable instead of (or in addition to) Exception. I think this construct should be safe in both PHP5 and PHP7:
} catch (Exception $ex) { // Do something. } catch (Throwable $ex) { // Do the exact same thing. }
We also typehint parameters as public function doThing(Exception $ex) in some cases. There is no meaningful typehint we can use here which will work in both PHP5 and PHP7 and allow us to pass either an Exception or a Throwable, so I think we just have to remove this typehinting (and replace it with comments or whatever, if there's a loss of clarity).