Re: Bug #962: Inconsistent Object behavior: when referenced from array v. referenced directly
| From: | David Wood | Date: | Tue, 01 Dec 1998 17:11:18 +0000 |
| Subject: | Re: Bug #962: Inconsistent Object behavior: when referenced from array v. referenced directly | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-2633@lists.php.net to get a copy of this message | ||
On Tue, 1 Dec 1998, Zeev Suraski wrote:
> At 19:16 30/11/98 -0500, dwood@templar.com wrote:
> >From: dwood@templar.com
> >Operating system: Win95
> >PHP version: 3.0.5
> >PHP Bug Type: Other
> >Bug description: Inconsistent Object behavior: when referenced from array
> v. referenced directly
> >
> >Here we go:
> >
> ><?
> >///////////////////////////////////////////////////////////////////////////
> ///////
> >
> >class A
> >{
> > var $entries;
> >}
> >
> >class B
> >{
> > var $message;
> >}
> >
> >$newA = new A;
> >
> >// Now we pack the A object into an array.
> >$external_array[0] = $newA;
> >
> >$newB = new B;
> >$newB->message = "testing...";
> >
> >// We put it into A's array:
> >$newA->entries[] = $newB;
> >
> >// Now we get it back directly from the A object:
> >$temp1 = $newA->entries[0]; // Temp1 should be our B object
> >print("You'll see the string: ".$temp1->message."<P>");
> >
> >// And then we'll try getting back via the array:
> >$damaged_by_external_array = $external_array[0]; // This will be our A
> object (or what's left of it)
> >
> >// This is where entries should be empty...
> >$temp2 = $damaged_by_external_array->entries[0]; // Temp2 should have been
> our retreived B object.
> >print("You won't see a thing: ".$temp2->message."<P>");
> >// Instead, this
> line returns an error that temp2 is, in fact, not an object.
> >
> >print("<HR>");
> >///////////////////////////////////////////////////////////////////////////
> ///////
> >
> >?>
> >
> >I've noticed that if I add the A object to the array _after_ the B object
> has been
> >added to $newA->entries, it works fine.
> >
> >I'm hoping that when I add something to an array it's not _copied_ into
> the array -
> >just referenced there. That would make this a bug. However, I bet
> everything I put
> >into an array (including potentially _huge_ objects) probably _are_
> copied, aren't they?
> >Eeesh. Well, if I'm right about that, then is it at least _possible_ to
> add references
> >instead of values to an array? I've noticed
> >
> >$a[0] = &$myobj;
> >
> >generates a parse error.
> >
> >Let me just say: languages that usually pass by value are great, but only
> languages
> >that usually pass by reference are any good for object oriented coding.
> That's fine
> >if the former is more important than the latter... but it'll make this OO
> junkie
> >a bit sad... :(
>
> I haven't read through the bug description yet, but the last three lines
> 'automatically' trigger a reply - PHP isn't, in any sort of way, an object
> oriented language, and was never intended to be one...
Well, I can understand that - and the majority of my work in PHP over the
years hasn't been (nor did it need to be) object oriented in nature. It's
just that having seen the new OO extensions in PHP3, I had hoped that
perhaps now the opportunity now existed...
____________________________________________________
David Wood | Templar Studios Inc.
157 Ludlow Street N 600 | New York, NY 10002
tel 212.982.9360 | fax 212.982.9370
--
PHP Development Mailing List http://www.php.net/
To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net
For help: php-dev-help@lists.php.net