Bug #34783 [Com]: Contradictory errors using ArrayAccess
| From: | georgwaechter at googlemail dot com | Date: | Tue, 03 Aug 2010 14:27:49 +0000 |
| Subject: | Bug #34783 [Com]: Contradictory errors using ArrayAccess | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-153055@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=34783&edit=1
ID: 34783
Comment by: georgwaechter at googlemail dot com
Reported by: oliver dot graetz at gmx dot de
Summary: Contradictory errors using ArrayAccess
Status: Bogus
Type: Bug
Package: SPL related
Operating System: WinXP, Debian Linux
PHP Version: 5.1.0RC1
Block user comment: N
New Comment:
Hi Oliver,
in my opinion you are absolutely right! I'm struggling with this "bug"
for months now. The interface ArrayAccess is actually really useless
until some serious php developers undestand that its essential that
ArrayAccess objects behave like normal arrays. For modern object
oriented programming this is simply a must. Enhanced this means that all
array related functions work with those objects too.
The current implementation is not complete.
Greets
Georg
Previous Comments:
------------------------------------------------------------------------
[2005-10-07 23:09:33] oliver dot graetz at gmx dot de
Perhaps there shouldn't be afix for the reference issues since they are
not meant to happen looking at the interface. But
$data['element']['element2']="hi"; should definitely work! Perhaps a
fix
to look if the first part of this code is accessing an object instead of
a real array has to be applied. An ordinary user sees nothing of a
reference. Either fix this with ArrayAccess or completely yank the
interface!
I see a future where more and more framework code is pretending to be an
array. If then users get this error message they won't understand the
world. "It's an array!? Where's the reference? Why the *#?* isn't this
working? I hate PHP5!"
If you implement code so something can look like an array than it MUST
be able to truely behave like an array.
------------------------------------------------------------------------
[2005-10-07 22:40:50] oliver dot graetz at gmx dot de
Why did this work in 5.0.3 by using &offsetGet() and can't be made to
work in 5.1? Why would changing the interface to read &offsetGet break
anything other than the (up to now) few apps DEFINING it without the
ampersand? 5.0 didn't complain about this at all and it worked. The
issues caused by a simple change of the interface a far inferior to
those caused by the "only variables can be passed by reference" some
weeks ago. And you're avoiding more serious trouble in later versions
when more and more applications are relying on the false behaviour?
------------------------------------------------------------------------
[2005-10-07 21:41:03] oliver dot graetz at gmx dot de
Won't happen. I'm just a user of PHP. As a result, this is one more case
where using a new feature becomes impossible by breaking BC (between 5.0
and 5.1). A yound and promising feature has to be left behind,
ArrayAccess won't be in use any more in future projects by certain
people since the desired behaviour can easily be achieved by using
ordinary methods. Syntactic sugar going to hell.
------------------------------------------------------------------------
[2005-10-07 20:20:40] helly@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
Just to state this again: IT IS IMPOSSIBLE TO HAVE ARRAYACCESS DEAL WITH
REFERENCES.
If you don\'t like that statement i suggest you prove it wrong by
writing a patch that actually works in all cases.
------------------------------------------------------------------------
[2005-10-07 19:14:37] oliver dot graetz at gmx dot de
One more point: Adding the & outside of the class just allows
referencing under PHP5.0 but not under 5.1. But having references is in
no way unfixable under 5.1:
class test
{
// rest as before
function &offsetGetRef($key) { return $this->data[$key]; }
}
$t=new test();
$t['huba']=array('one','two');
$entry=&$t->offsetGetRef('huba');
$entry[]='three';
print_r($t['huba']);
Voilà! It works. Telling that it's unfixable just doesn't do the issue
justice. Perhaps the fix is more difficult but it can be done. And "we
didn't mean to support references in the first place" isn't valid since
normal arrays are meant to be used this way and ArrayAccess was meant to
mimic this for objects.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/bug.php?id=34783
--
Edit this bug report at http://bugs.php.net/bug.php?id=34783&edit=1