Hello PHP Internals,

I would like to propose a discussion regarding two current limitations in
PHP's exception handling system that I believe could be addressed to
improve flexibility and developer experience.

A few years ago I found that a library printed error traces wrong.
After a little research I found that there was a mix of 3rd party
integration error + raised error around the current bridge implementation
(http client).

There were several PHP applications with microservices architecture which I
had access to (docker + sources).

So having the message and traces I'd like to have an error chain as it can
be done chaining several errors through a new Exception(previous: $e).
But PHP does not allow you to manually implement Throwable. Instead you
should extend Exception. But after that you still cannot override the
getTrace() method because it's final.

So my proposal is pretty simple: Remove both restrictions.

1. Allow user classes to implement Throwable interface directly

User classes cannot implement the Throwable interface now.

```php
class MyCustomThrowable implements Throwable {}

// Fatal error: Class MyCustomThrowable cannot implement interface
Throwable, extend Exception or Error instead
```


2. Make getTrace() non-final or provide alternative customization mechanism


Exception traces cannot be overridden now.

```php
class MyCustomThrowable extends Exception {
    function getTrace() { return []; }
}

try { throw new MyCustomThrowable(); }
catch (Exception $e) { var_dump($e->getTrace()); }

// Fatal error: Cannot override final method Exception::getTrace()
```


There are some points about the feature:

- Microservice support: Preserve traces across service boundaries
- Proxy/decorator patterns: Maintain original error context through wrappers
- Unified error handling: Any object implementing Throwable can be thrown
consistently
- Testing improvements: Create mock throwables for unit tests
- Performance optimization: Avoid deep call stacks in generated traces


What do you think about it? Are there disadvantages or points to have the
exceptions in the current state?
-- 
Best regards,
Dmitrii Derepko.
@xepozz

Reply via email to