> On 5 Oct 2022, at 12:41, Dusk <d...@woofle.net> wrote:
>
> On Oct 4, 2022, at 21:46, Eugene Sidelnyk <zsidel...@gmail.com> wrote:
>> $foo = (int|float)$bar;
>
> As written, I wouldn't know what to expect this to do with a string value --
> would it cast it to int or float?
>
> Based on the behavior of your second example, the answer appears to be
> "float", so this syntax seems to be equivalent to:
>
> $foo = \is_int($bar) ? $bar : (float) $bar;
>
> Or, even more concisely:
>
> $foo = 0+$bar;
>
> I'd be even less sure what to expect when casting to other union types. What
> would the expected result of casting a string to (bool|array|object) be, for
> example? I'm not sure there are many meaningful operations which could be
> constructed here.
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
Hi,
I think the intention is that it would follow precisely the same casting rules
as function parameters do.
So e.g:
```
function foo(int|float $var) {
return $var;
}
$f1 = foo(‘1’);
$c1 = (int|float) ‘1’;
$f2 = foo(‘1.1’);
$c2 = (int|float) ‘1.1’;
```
In both scenarios the $f1/$c1 and $f2/$c2 would result in the same type.
Your first example isn’t quite the same though; Passing ‘1’ to a parameter
typed as `int|float` will cast it to an integer, your example casts such a
value to a float.
The `0+$value` thing is interesting, but also definitely seems less intuitive
to my eye.
Given your last comment I think its worth reiterating Eugene’s point is simply
about exposing the **existing** cast behaviour that happens with typed
parameters, to be usable on variables.
I can see some benefit in the proposal, but I think I’d be more interested in
the ability to define local variables as being a given type (or union), and
then have the engine cast (or error) when assigning to them - essentially how
typed object properties work, but for regular variables.
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php