On Tuesday, 2 July 2024 at 07:49, Marc Bennewitz <marc@mabe.berlin> wrote:

> Hi Gina,
>
> On 25.06.24 16:36, Gina P. Banyard wrote:
>
>> Hello internals,
>>
>> It is this time of year again where we proposed a list of deprecations to 
>> add in PHP 8.4:
>> https://wiki.php.net/rfc/deprecations_php_8_4
>> As a reminder, this list has been compiled over the course of the past year 
>> by various different people.
>>
>> And as usual, each deprecation will be voted in isolation.
>>
>> We still have a bit of time buffer, so if anyone else has any suggestions, 
>> they are free to add them to the RFC.
>>
>> Some should be non-controversial, others a bit more.
>> If such, they might warrant their own dedicated RFC, or be dropped from the 
>> proposal altogether.
>
> I would like to propose a deprecation of implicit cast to int of numeric 
> strings using bit shift operators.
>
> For the following reasons:
> 1. In PHP strings are byte arrays and without context it's not possible to 
> know if "123" is actually a number or just three bytes of 0x313234
> 2. The other bitwise operators `|`, `&`, `~`, `^` already take it as byte 
> array, only the bit shift operators try to be smart here
> 3. Non numeric strings already fail with "Unsupported operand types: string 
> >> int"
> 4. This makes working with byte arrays unnecessary hard and forces you to use 
> limited and system depending int's.
>
> https://3v4l.org/IBUDD
>
> While processing strings as byte arrays using bit shift operators needs a 
> separate RFC, I think, if there is an agreement on deprecating this implicit 
> cast it would already be beneficial to have this sooner than later.
>
> What do you think?

I personally think the scope of this is too large as you have not accounted of 
all the details.

If you try to do a bitwise operator between a numeric string and an integer the 
numeric string will be implicitly converted to an int.
However, if you try to use a bitwise operator between an integer and a 
non-numeric string you also get a TypeError about unsupported operand types: 
https://3v4l.org/W582TN

Thus the current bit shift operators follow from the existing semantics, and 
curtailling them without doing it for the other bitwise operators doesn't make 
a lot of sense to me.

Moreover, I feel it makes more sense creating dedicated functions for byte 
array/string bitwise operators and deprecate using the native operators for 
this and relegate them just for integers.

Best regards,
Gina P. Banyard

Reply via email to