śr., 27 cze 2018 o 03:29 Rudolf Theunissen <rudolf.theunis...@gmail.com> napisał(a):
> > I would like to see this in an extension first, i think it's perfectly > doable and people can test it before merging to core > > It was possible in Sara's extension[1], so maybe now also? Take a look. > Actually not sure this can be done as an extension because it changes > zend_operators and introduces a new handler to make it all work. > > > Would be nice if compareTo and equals were used only if left operand and > right operand used the same comparator function. > In other words, $a == $b must not work if $a->__equals and $b->__equals are > two different functions > > So effectively it means we only call __equals if both sides are instances > of the same class? > > > If $left operand and $right operand both have the magic methods, it will > call $left->__magic($right), otherwise, if only the right one has the > handler? What if the right one has compareTo and the left has only equal? > you probably should add a table that explains which method is called > depending in the availability of the two magic methods in the operands. > > Good idea. :) In brief, as it's implemented right now, the LHS takes > precedence and the RHS will be called if it's the only one that implements > the operation. I'll write some more tests for these cases and build that > table for the RFC. > > > I'd introduce a debug mode that forces php to call both > $left->__equals($right) and $right->__equals($left) so that symmetry is > guaranteed by design. > > If we want to guarantee symmetry by design, we have to either compare both > sides or only compare if instances of the same class, or document that > comparison should be implemented such that a > b == b < a, etc. I'm not > convinced that a double comparison outweighs the responsibility on the user > to be sensible. > > On Tue, 26 Jun 2018 at 21:04, Wes <netmo....@gmail.com> wrote: > > > some ideas and concerns: > > > > - I would like to see this in an extension first, i think it's perfectly > > doable and people can test it before merging to core > > > > - would be nice if compareTo and equals were used only if left operand > and > > right operand used the same comparator function. > > In other words, $a == $b must not work if $a->__equals and $b->__equals > > are two different functions > > > > - otherwise RFC should specify the precedence. if $left operand and > $right > > operand both have the magic methods, it will call $left->__magic($right), > > otherwise, if only the right one has the handler? > > what if the right one has compareTo and the left has only equal? you > > probably should add a table that explains which method is called > depending > > in the availability of the two magic methods in the operands. > > > > - I'd introduce a debug mode that forces php to call both > > $left->__equals($right) and $right->__equals($left) so that symmetry is > > guaranteed by design. You could do that when "assertions" are active. > > > > gl > > > [1] https://github.com/php/pecl-php-operator/blob/master/operator.c -- regards / pozdrawiam, -- Michał Brzuchalski about.me/brzuchal brzuchalski.com