Re: [RFC] [Discussion] Never parameters

From: Date: Wed, 12 Mar 2025 09:17:45 +0000
Subject: Re: [RFC] [Discussion] Never parameters
References: 1  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
On 10 Mar 2025, at 20:07, Daniel Scherzer <[email protected]> wrote:
> Hi internals,
> 
> I'd like to start discussion on a new RFC about allowing never for parameter
> types when declaring a method.
> 
> * RFC: https://wiki.php.net/rfc/never-parameters-v2
> * Implementation: https://github.com/php/php-src/pull/18016
> 
> -Daniel

Hi Daniel,

To begin, I'm all for a never bottom type, and I use it regularly when I need to
write TypeScript.

However, I think the example offered in this RFC – while a valid one, for now – isn't the
most appropriate use case for a never type. A bottom type is more often used when
defining conditional types, or to assert that the default for a switch/match expression should never
be reached without raising an error that the switch/match cases are not exhaustive.

As such, a never type provides a lot of value for static analysis tools and IDEs, and
as a matter of fact both PHPStan[1] and PhpStorm[2] provide ways to declare a bottom type.
Furthermore, when conditional return types and/or generics are finally implemented in PHP, never
will become even more valuable if not essential.

But, when generics eventually do make their way to PHP, it also means the provided example no longer
applies, because you would just be able to use generic types:

```php
interface BackedEnum<T> extends UnitEnum {
  public T $value;
 
  public static function from(T $value): static;
  public static function tryFrom(T $value): ?static;
}
```

So I think it may help sell your RFC if you provide some additional context illustrating the use of
the never type in generics and static analysis. Otherwise I fear that some people may
interpret never as a stopgap solution until we get generics.

Alwin


[1] https://phpstan.org/writing-php-code/phpdoc-types#bottom-type
[2] https://github.com/JetBrains/phpstorm-attributes/blob/master/README.md#noreturn



Thread (33 messages)

« previous php.internals (#126725) next »