Re: [Early Feedback] Pattern matching

From: Date: Sat, 22 Jun 2024 19:26:39 +0000
Subject: Re: [Early Feedback] Pattern matching
References: 1 2 3 4 5  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
On 22/06/2024 19:34, Robert Landers wrote:
I've brought this up before, but I mostly see "as" being useful for static analysis. That's what I've mostly used it for C#, anyway. Logically, you know the type, but due to one-thing-or-another you can't "prove" the type is that type (such as foreach-arrays or dealing with results from user-code callbacks in library code). I want to be able to say "this is an int or else."
I absolutely see the use case for that; I just don't think "as" is a good word for it, because that's not what it means in normal English. Incidentally, according to the C# docs at https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/type-testing-and-cast#as-operator
The as operator explicitly converts the result of an expression to a given reference or nullable value type. If the conversion isn't possible, the as operator returns null. Unlike a cast expression, the as operator never throws an exception.
So it more closely matches my intuition: a statement of just "foo as Bar;" would be useless, because it's calculating a value and discarding it, with no side effects. As you say, the conversion might not be of the value, but of the statically analysed type, but in C#, that's all part of the language. In PHP "$foo = $bar as SomeInterface;" would have no visible effect except in third-party tooling, where it can already be written "/** @var SomeInterface $foo */ $foo = $bar;" -- Rowan Tommins [IMSoP]

Thread (79 messages)

« previous php.internals (#123756) next »