On Mon, Apr 28, 2025, at 3:30 PM, Tim Düsterhus wrote:
> Hi
>
> On 4/28/25 22:04, Larry Garfield wrote:
>> Holy cow, thank you for this bit.  The inability to tell what went wrong 
>> programmatically without string parsing the exception message is one of my 
>> biggest pet peeves in current exceptions.
>
> Anything particular from the standard library? It might be possible to 
> improve this for existing extensions without creating an entirely new 
> hierarchy and without an RFC.

I was thinking the same thing.  The main one that comes to mind is 
ArgumentCountError, where while doing some interesting meta-coding I had to do 
this:

https://github.com/Crell/AttributeUtils/blob/master/src/Analyzer.php#L123

>> * "Non-base exceptions MAY define additional properties to provide 
>> additional metadata about the nature of the error."  I am tempted to 
>> strengthen that to SHOULD, to help drive the point home.  Maybe use a 
>> SHOULD, and at the end add "unless the nature and details of the error is 
>> fully defined by the exceptions' type."
>
> I would not want to encourage authors to add additional properties “just 
> in case” they might be useful by using a SHOULD phrasing. I also expect 
> this to be something that can be resolved by simple agreement during the 
> RFC discussion or review of the implementation.
>
> I historically also had almost no cases where additional properties on 
> an exception provided value for *programmatic consumption*. Most of the 
> cases could be decided by class name alone and the message was 
> sufficient to provide additional details for the human reader in the 
> application logs (e.g. the exact nature of a DNS resolution error). Keep 
> in mind that additional properties cannot be handled in a generic 
> fashion, so they are useful for programmatic consumption when catching a 
> specific exception class only.
>
>> * Would allowing an extension-tagging interface instead of a base class be 
>> an option?  It still allows for catching "anything thrown by this 
>> extension", which I presume is the goal.  If not, why?
>
> See the “Choice of Base Exception” section in 
> https://github.com/php/php-src/pull/9220.

That seems to be about not having a common interface for both the Error and the 
Exception, which makes sense.  I'm talking about `interface ExampleException 
{}` and `interface ExampleError {}`, instead of `class ExampleException extends 
Exception {}`, etc.

--Larry Garfield

Reply via email to