Re: Renaming "strict types" to "scalar type coercion"

From: Date: Fri, 21 Jun 2024 16:24:55 +0000
Subject: Re: Renaming "strict types" to "scalar type coercion"
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-123737@lists.php.net to get a copy of this message
On Fri, Jun 21, 2024 at 4:50 PM Rowan Tommins [IMSoP] <imsop.php@rwec.co.uk> wrote: > > Le 21/06/2024 à 14:27, Robert Landers a écrit : > > This is why I wanted to work on "as" part of the pattern matching. It > isn't clear what will happen with the actual pattern matching RFC > (yet), but being able to do: > > some_function_expecting_int($_GET['foo'] as ?int); > > > > I've started drafting a proposal for strict casts - independent of the pattern matching > effort, but might be combinable - but the devil's in the details of exactly when the cast > should fail, and what should happen when it does. > > For instance, should cast('abc' as ?int) fail, or default to null? Do we need > different syntax for both? I have some thoughts, but haven't quite settled on a full proposal > yet. I know we have different opinions about many things, but I'd actually love to help if you'd want it. I think our different opinions might make it better. :) I vaguely remember our last conversation about this and I kinda liked your 'catch' thing. IIRC, it looked something like: 'abc' as ?int otherwise false; or something (pretty sure it wasn't "otherwise") where if it wasn't an int|null, it would fall back to false. If there wasn't a fallback, it was a TypeError or something? One thing nice about "as" is that having typed variables becomes much more simpler to implement (if anyone wanted to implement it) even as a transpilation step: int $x = 5; $x += "10"; // type error gets transpiled to: $x = 5 as int; $x += "10" as int; Interesting stuff. > > On Fri, 21 Jun 2024, at 13:46, Pierre wrote: > > > And how about: > > some_function_expecting_int(\intval($_GET['foo'])); > > > > intval($foo) and (int)$foo do exactly the same thing; they're basically just different > syntax. > > > > And moreover, I'd write something like this, but: > > function validate_int(mixed $value): int { ... > > > > Which is why I included the word *concise*: it shouldn't be necessary for every user to > write or install a custom function for such a common requirement. > > Regards, > -- > Rowan Tommins > [IMSoP] Robert Landers Software Engineer Utrecht NL

« previous php.internals (#123737) next »