Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:23887 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 11687 invoked by uid 1010); 3 Jun 2006 16:30:43 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 11672 invoked from network); 3 Jun 2006 16:30:43 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 3 Jun 2006 16:30:43 -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:34316] helo=lerdorf.com) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id ED/10-22639-139B1844 for ; Sat, 03 Jun 2006 12:30:42 -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 k53GUcEx026286; Sat, 3 Jun 2006 09:30:38 -0700 Message-ID: <4481B92E.2030802@lerdorf.com> Date: Sat, 03 Jun 2006 09:30:38 -0700 User-Agent: Thunderbird 3.0a1 (Macintosh/20060414) MIME-Version: 1.0 To: Ilia Alshanetsky CC: Marcus Boerger , internals@lists.php.net, Dmitry Stogov , Andi Gutmans , Zeev Suraski , Ilia Alshanetsky References: <795156743.20060603134212@marcus-boerger.de> <18CE805D-C032-4B64-950A-119E46287AF5@prohost.org> In-Reply-To: <18CE805D-C032-4B64-950A-119E46287AF5@prohost.org> 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) 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