Re: Proposal: AS assertions

From: Date: Thu, 21 Mar 2024 22:39:55 +0000
Subject: Re: Proposal: AS assertions
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-122719@lists.php.net to get a copy of this message
> > What's the advantage of a language construct over the following? > > ```php > /** > * @template T of object > * @psalm-assert T $value > * @param class-string<T> $type > */ > function as(mixed $value, string $type): mixed > { > if (! $value instanceof $type) { throw > SomeKindOfException::forMismatchingRequirements($value, $type); } > > return $value; > } > > echo as(myExpression(), MyType::class)->methodOfMyType(); > ``` > > A static analysis tool supporting something in docblocks should not preclude those things being added in syntax IMO. Hack's as operator is very neat, and it'd be trivial for existing SA tools to support the same in PHP. Here's a demo of as in Hack getting flagged by a SA tool: https://hakana.dev/#XQAAgAA2AAAAAAAAAAAzHUn_qWH7EwabJzyN0tdfxv3ug6f7oZ-qScnamcl1qjUZCPmuKA3tD-KFr1f0ZPcrAXt_D1L___KsQAA%3D This would also benefit from a nonnull subtype of mixed which could be used as a null refinement.

« previous php.internals (#122719) next »