Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:23891 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 25696 invoked by uid 1010); 3 Jun 2006 17:12:07 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 25681 invoked from network); 3 Jun 2006 17:12:07 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 3 Jun 2006 17:12:07 -0000 X-PHP-List-Original-Sender: rasmus@lerdorf.com X-Host-Fingerprint: 204.11.219.139 lerdorf.com Linux 2.5 (sometimes 2.4) (4) Received: from ([204.11.219.139:51133] helo=lerdorf.com) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 42/B1-22639-3E2C1844 for ; Sat, 03 Jun 2006 13:12:04 -0400 Received: from [192.168.200.106] (c-24-6-5-134.hsd1.ca.comcast.net [24.6.5.134]) (authenticated bits=0) by lerdorf.com (8.13.6/8.13.6/Debian-1) with ESMTP id k53HBwRf030988; Sat, 3 Jun 2006 10:11:59 -0700 Message-ID: <4481C2DE.2050409@lerdorf.com> Date: Sat, 03 Jun 2006 10:11:58 -0700 User-Agent: Thunderbird 3.0a1 (Macintosh/20060414) MIME-Version: 1.0 To: Marcus Boerger CC: Ilia Alshanetsky , internals@lists.php.net, Dmitry Stogov , Andi Gutmans , Zeev Suraski References: <795156743.20060603134212@marcus-boerger.de> <18CE805D-C032-4B64-950A-119E46287AF5@prohost.org> <4481B92E.2030802@lerdorf.com> <1895425731.20060603184326@marcus-boerger.de> In-Reply-To: <1895425731.20060603184326@marcus-boerger.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] Missing __toString() part From: rasmus@lerdorf.com (Rasmus Lerdorf) Right, just let me clarify. My point here was that if we are going to make a change here, we should do it correctly and come up with a way to create a unique hash of the object so it really can be used as an array index. Magically calling __toString() in a case where we don't have an explicit string context sounds half-assed and non-obvious to me. If you want that ability, simply do: $a[(string)$obj] and it is obvious what you are doing. -Rasmus Marcus Boerger wrote: > Hello Rasmus, > > though you are probably right here your idea brought to it's full > extend will bring a major BC break. Just consider we had both key > and value as a zval then the current behavior would change for quite > a lot of situations including not only objects and resources but also > booleans, floats and NULL. > > Right now everybody is used to the restiction that an array key can > only be a string or an integer and if not it is either not acceptable > as a key at all or is being converted to either one. > > best regards > marcus > > Saturday, June 3, 2006, 6:30:38 PM, you wrote: > >> I don't understand why using the object as an index would trigger a >> __toString() call. PHP's array indices are not defined to be strings, >> so I don't see this as being a string context use and thus __toString() >> shouldn't be called. > >> I also don't see why we need to make a distinction between the key and >> the value here if there is any way we can avoid it. > >> For example, this obviously works: > >> class foo { >> function a() { echo "a"; } >> } >> $a = new foo(); >> $b[1] = $a; >> $b[1]->a(); > >> Why shouldn't this? > >> $b[$a] = 1; >> key($b)->a(); > >> I have always looked a PHP array as having 2 places to store things. >> You can store stuff in the key with the caveat/feature that it must be >> unique and you can store whatever you want in the value part. Only >> allowing strings and integers in the key seems like an arbitrary >> restriction to me. As long as the key is something we can somehow >> uniquely identify I think we should aim to support it. > >> -Rasmus > >> Ilia Alshanetsky wrote: >>> I think this is a potentially missing bit of functionality we definitely >>> need to consider including. There is really no technical reason why >>> $foo[new ToStringObject] = "bar"; cannot work or a reason why it >>> shouldn't as far as functionality goes. >>> >>> >>> Ilia Alshanetsky >>> >>> >>> >>> >>> On 3-Jun-06, at 7:42 AM, Marcus Boerger wrote: >>> >>>> Hello guys, >>>> >>>> the attached patch closes one more __toString() part. It allows >>>> to use objects that define __toString as indexes to arrays. What do >>>> you guys think about this, should we add it or stay with the old >>>> behavior that didn't allow objects as indexes at all. >>>> >>>> --Best regards, >>>> Marcus mailto:mail@marcus-boerger.de >>>> >>>> --PHP Internals - PHP Runtime Development Mailing List >>>> To unsubscribe, visit: http://www.php.net/unsub.php >>> --PHP Internals - PHP Runtime Development Mailing List >>> To unsubscribe, visit: http://www.php.net/unsub.php > > > > > Best regards, > Marcus