On Mon, Jul 6, 2020 at 6:22 PM Marco Pivetta <ocram...@gmail.com> wrote:

> Hey Arnold,
>
> Perhaps it makes sense for <=> to still operate with other types, as long
> as they are uniform? Specifically:
>
>  * error: 1 <=> "1"
>  * ok: "a" <=> "b"
>  * ok: true <=> false
>

Using `==`, `!=`, and `<=>` with string operands can lead to unexpected
results because the operation differs when both operands are numeric
strings. Instead `strcmp` or `Collator::compare()` should be used. See
https://wiki.php.net/rfc/strict_operators#numeric_string_comparison

Boolean operands could be allowed but that has limited use. Only allowing
int or float is much clearer.


> Similar for sorting: I use <=> to differentiate multi-dimensional arrays:
> perhaps it should error if the array structure differs?
>

Some functionality concerning comparing objects and arrays is lost with
strict_operators unfortunately. The RFC reduces complexity by throwing an
error purely based on the type of operands and not based on the value of
the operands. Alternatives where `==` and `!=` are supported for all types,
are as complex as the comparison rules without strict_operators and/or
result in cases where the outcome of an operation is changed based on the
directive.


> The rest of the proposal makes a lot of sense to me.
>

Thanks.


>
> Marco Pivetta
>
> http://twitter.com/Ocramius
>
> http://ocramius.github.com/
>
>
> On Mon, Jul 6, 2020 at 5:27 PM Arnold Daniels <
> arnold.adaniels...@gmail.com> wrote:
>
>> Hi all,
>>
>> I'd like to start the discussion of the "Strict operators directive" RFC
>> version 1.5. This RFC proposes a new directive strict_operators, which
>> limits the type juggling done by operators to avoid unexpected results.
>>
>> https://wiki.php.net/rfc/strict_operators
>>
>> There are some significant changes from the previous version.
>> strict_operators no longer has cases where it changes the outcome of an
>> operation. To achieve this the following changes are made to the RFC
>>
>> * All comparison operators, besides `===` and `!==`, only accept `int`
>> and `float` operands. For any other type a `TypeError` is thrown. This
>> includes `==` and `!=`.
>> * The `switch` statement is not affected.
>>
>> For frequently asked questions please see
>> https://wiki.php.net/rfc/strict_operators/faq.
>>
>> [Arnold Daniels - Chat @ Spike](
>> https://spikenow.com/r/a/?ref=spike-organic-signature&_ts=l1bam)
>> [l1bam]
>
>

Reply via email to