Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:102561 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 95347 invoked from network); 3 Jul 2018 20:14:43 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 3 Jul 2018 20:14:43 -0000 Authentication-Results: pb1.pair.com smtp.mail=smalyshev@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=smalyshev@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 74.125.83.66 as permitted sender) X-PHP-List-Original-Sender: smalyshev@gmail.com X-Host-Fingerprint: 74.125.83.66 mail-pg0-f66.google.com Received: from [74.125.83.66] ([74.125.83.66:45460] helo=mail-pg0-f66.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 1A/93-15351-239DB3B5 for ; Tue, 03 Jul 2018 16:14:42 -0400 Received: by mail-pg0-f66.google.com with SMTP id z1-v6so1444984pgv.12 for ; Tue, 03 Jul 2018 13:14:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:openpgp:autocrypt:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=XomTDX7YJ0O/87cHXqHofkDhldI0gviRa6pYzs3PjYo=; b=r8x4hUQlOgQKn6GJ5zYjgRC+FDMbtpXm+lK6bmJOF327UemAdlhDHm4ybARKgLTog5 NPl9air7r0TG56DK3ewSEMVExHrcv/ijC1hF8s9TB7h8qLif34QaqB60LpQUx/ZW47El prXGMY3wmTjT69twVX2Huk1i7vTVVrDvqSaUUKyAyBEkmDoUxyQPGvsMF7tBWYhh+Jj6 nrlwqN+V9nDOCDlalCjYwrVZNV6EUaGvr9V30ewG+0blogG01nzGN1tDr2LIfp8ZugpM vtA5kMPNCxfx5CY+zzROpPWYAG/UmQGbVPezOemYflQne6sEZ9VoBOLRRSA6lt/vLXHT qNUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:openpgp:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=XomTDX7YJ0O/87cHXqHofkDhldI0gviRa6pYzs3PjYo=; b=WgeU3V+a6/6qbituRhekFwCT3WYtmhXEdqBr40RQdOPdke6ibtS7e6Y5AQGOSs5Nuo sG8ZGrXPWCX0L6v+SeUQ/oFWcU9Gqqb6dAcnieDq99LOZpBEYnIlyXzp5e46cCW47+p8 5VheJ3O+3zcaPuCiWJ03dp43Up4DJ2mFfpUIjV3LORc8+GClvdhuq7OpNsDVXurSHpLD P7Pyj4XKEWaic5hNusrOBfrV/9EIgRjCROPW7Cft4LBz3vItqs/Nh8P/XkjVukWpVxo/ 1eJwSR+O3i8G8oTxcqUO5OL2YGhc10WBQzccAK2uzmu1AjcK6hXPHcRMqU+fi10yX5Xg wtCQ== X-Gm-Message-State: APt69E0LhTAdrlj+7704sqxKuC8P0pTJK7q1/PSjrikrnLH5qo6QHsJZ FTTtsjeRw9UOJXuxRwOwRgOCFrGHNA== X-Google-Smtp-Source: ADUXVKJykewJkfhP9AKrUSAAPlH42oS3RtOax/ubfTELtdW/akIRF82Cq/G4kp7kMEJiK9K3okcbyA== X-Received: by 2002:a63:3348:: with SMTP id z69-v6mr26207271pgz.171.1530648879861; Tue, 03 Jul 2018 13:14:39 -0700 (PDT) Received: from Stas-Pro-2021.local (c-24-4-176-254.hsd1.ca.comcast.net. [24.4.176.254]) by smtp.gmail.com with ESMTPSA id c3-v6sm4886913pfa.157.2018.07.03.13.14.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Jul 2018 13:14:38 -0700 (PDT) To: Rudolf Theunissen , netmo.php@gmail.com Cc: internals@lists.php.net References: Openpgp: preference=signencrypt Autocrypt: addr=smalyshev@gmail.com; prefer-encrypt=mutual; keydata= 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 Message-ID: Date: Tue, 3 Jul 2018 13:14:38 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:60.0) Gecko/20100101 Thunderbird/60.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] [RFC] User-defined object comparison From: smalyshev@gmail.com (Stanislav Malyshev) Hi! > 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? We can just define that == calls __equals on the left. That's, for example, what Python does. This would produce a weird consequence of $a == $b and $b == $a not being the same, but that's what you get for overloading operators. That's why overloading operators is not always the best idea, because of disconnect between perceived semantics (math equality operator, which is symmetric, reflexive and transitive) and actual semantic (which is not guaranteed to have any of the math equality properties). In any case, "the same class" would be too restrictive, as there's inheritance, so we should support LSP. But then again, if $a and $b are in different places on inheritance hierarchy, we can can non-symmetric operator. This is kinda deep problem that is not really working well in most Java code, for example. See: https://www.artima.com/pins1ed/object-equality.html (for reference, Martin Odersky is the guy who did Java generics, and designed Scala, so he knows a quite bit about OO things :) -- Stas Malyshev smalyshev@gmail.com