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] > >