Using less generic exceptions for dates

php.internals

Vincent Langlet

3 years ago
Hi, When using json_encode or json_decode with the `JSON_THROW_ON_ERROR` flag, `JsonException` might be thrown. When using `new DateTime('foo')`, a generic `Exception` is thrown. Incidentally, I wonder why it's not an `InvalidArgumentException` (but that could be another debate). But my main point is that I think it would be useful to use a specific exception ``` class DateException extends Exception {} ``` - It allows a specific treatment when catching exceptions - It allows a specific analysis when using static analysis tools like Psalm or PHPStan. In a general way, I would say that PHP class/method should always use scoped Exception instead of generics ones. I know nothing about how php is implemented but I would say introducing DateException shouldn't be too hard and it's BC. What do you think ?

Derick Rethans

3 years ago
On 21 November 2022 11:34:10 GMT, Vincent Langlet <mr.vincent.langlet@gmail.com> wrote:
>Hi, > >When using json_encode or json_decode with the `JSON_THROW_ON_ERROR` flag, >`JsonException` might be thrown. > >When using `new DateTime('foo')`, a generic `Exception` is thrown. >Incidentally, I wonder why it's not an `InvalidArgumentException` (but that >could be another debate). > >But my main point is that I think it would be useful to use a specific >exception >``` >class DateException extends Exception {} >``` >- It allows a specific treatment when catching exceptions >- It allows a specific analysis when using static analysis tools like Psalm >or PHPStan. > >In a general way, I would say that PHP class/method should always use >scoped Exception instead of generics ones. > >I know nothing about how php is implemented but I would say introducing >DateException shouldn't be too hard and it's BC. What do you think ?
I think this is a good idea and will add it to my todo list to investigate. cheers Derick

Tim Düsterhus

3 years ago
Hi On 11/21/22 13:36, Derick Rethans wrote:
>> But my main point is that I think it would be useful to use a specific >> exception >> ``` >> class DateException extends Exception {} >> ``` >> - It allows a specific treatment when catching exceptions >> - It allows a specific analysis when using static analysis tools like Psalm >> or PHPStan. >> >> In a general way, I would say that PHP class/method should always use >> scoped Exception instead of generics ones. >> >> I know nothing about how php is implemented but I would say introducing >> DateException shouldn't be too hard and it's BC. What do you think ? > > I think this is a good idea and will add it to my todo list to investigate. >
I agree that this is a good idea and would like to further recommend not having *just one* Exception, but several Exceptions to allow further differentiating the cause, e.g. class MalformedDateStringException extends DateException {} class UnrepresentableDateException extends DateException {} Related PR of mine to add the Exception hierarchy for PHP 8.2's ext/random: https://github.com/php/php-src/pull/9220 Best regards Tim Düsterhus

Derick Rethans

3 years ago
On Mon, 21 Nov 2022, Derick Rethans wrote:
> On 21 November 2022 11:34:10 GMT, Vincent Langlet <mr.vincent.langlet@gmail.com> wrote: > > > >When using json_encode or json_decode with the `JSON_THROW_ON_ERROR` > >flag, `JsonException` might be thrown. > > > >When using `new DateTime('foo')`, a generic `Exception` is thrown. > >Incidentally, I wonder why it's not an `InvalidArgumentException` > >(but that could be another debate). > > > >But my main point is that I think it would be useful to use a specific > >exception > >``` > >class DateException extends Exception {} > >``` > > > >- It allows a specific treatment when catching exceptions > >- It allows a specific analysis when using static analysis tools > > like Psalm or PHPStan. > > > >In a general way, I would say that PHP class/method should always use > >scoped Exception instead of generics ones. > > > >I know nothing about how php is implemented but I would say > >introducing DateException shouldn't be too hard and it's BC. What do > >you think ? > > I think this is a good idea and will add it to my todo list to > investigate.
I have now made an RFC for this: https://wiki.php.net/rfc/datetime-exceptions cheers, Derick
-- https://derickrethans.nl | https://xdebug.org | https://dram.io Author of Xdebug. Like it? Consider supporting me: https://xdebug.org/support Host of PHP Internals News: https://phpinternals.news mastodon: @derickr@phpc.social @xdebug@phpc.social twitter: @derickr and @xdebug