> -----Original Message-----
> From: Gustavo Lopes [mailto:glo...@nebm.ist.utl.pt]
> Sent: 23 November 2011 22:31
> 
> On Wed, 23 Nov 2011 21:06:09 -0000, Pierre Joye
> <pierre....@gmail.com>
> wrote:
> 
> > The fact that we have reports here showing code not working
> anymore
> > because of this change tells me that it is a BC break. We can call
> it
> > a bug fix but it still breaks code out there for no real benefit
> but
> > edge case usages. We had this situation before, that does not help
> us.
> >
> 
> I'd say for no benefit at all. Why would anyone ever want to take a
> string
> offset from a string that certainly has length 1? Except for taking
> satisfaction in this "improved consistency", I see absolutely no
> benefit.
> 
> Up until now, it was deemed a useless but innocuous change. Now that
> we
> found it has pernicious side effects, we ought to revert it.

That's exactly my take on it. As far as I can see, if 5.4 is released
with this "fix" in, it will effectively be rendered a non-upgradable-to
version for most big projects.

For what it's worth (not much!), my two pennorth on this is that
whilst, like some others, I can see the marginal benefit of making the
behaviour consistent, I really don't think the change can be done in
one go. Given that this WILL break existing code (some of it mine :( ),
there needs to be a release where the usage generates an error message
- probably an E_WARNING, or maybe an E_STRICT - and an easy alternative
is provided. Since the simplest alternative way of performing the
necessary chained checks would seem to be:

    if (is_array($arr) && array_key_exists('key1', $arr)
        && is_array($arr['key1'] && array_key_exists('key2', $arr['key2'])
        ...
        )

which substitutes 2 function calls and 2 array accesses per dimension
for a single function call and 1 multi-dimensional array access, there has
to be scope for a function called something like array_offset_exists with
a signature like

    array_offset_exists(array $array, mixed $offset, ...)

(Yes, I know, inconsistent argument order and all that, but....)

so that people can have a chance to transform

    isset($arr['key1']['key2']['key3'])

into

    array_offset_exists($arr, 'key1', 'key2, 'key3')

before the full fix is put into place in a subsequent version.



Cheers!

Mike

-- 
Mike Ford,
Electronic Information Developer, Libraries and Learning Innovation,  
Portland PD507, City Campus, Leeds Metropolitan University,
Portland Way, LEEDS,  LS1 3HE,  United Kingdom 
E: m.f...@leedsmet.ac.uk     T: +44 113 812 4730




To view the terms under which this email is distributed, please go to 
http://disclaimer.leedsmet.ac.uk/email.htm

Reply via email to