On Fri, Nov 25, 2011 at 4:07 AM, Daniel Convissor <
dani...@analysisandsolutions.com> wrote:

> Hi Anthony:
>
> > isset($foo['bar'][1]['baz']) && is_array($foo['bar'][1])
> >
> > You don't need to check each level.  Only the one above the key you're
> > looking at.
>
> Excellent thinking.  One hitch... that goes fatal in 5.3 if $foo is a
> string.
> Here's how to write the test so it works the same way under 5.3 and 5.4:
>

yeah, and as you just noticed, one has to write less boilerplate code for
the current 5.4 to guarantee that $array["foo"]["bar"]["baz"] is set and it
is an element of an array.
so I think we are just get to the point that everybody can agree that:
1, the string offset pseudo type and the chaining restriction sucks in 5.3,
as it can fatal even an isset call
2, the int type juggling for string offsets is un-intuitive, and it can
bite people.
3, because of 1 and 2, it writing variable checks which can handle type
mismatch for complex datatypes requires much boilerplate code.

The change introduced in 5.4 solves 1, doesn't touch 2, and makes 3 much
easier to solve.
So I think that we should keep the new behavior and focus on fixing 2,
either via documentation, or changing the behavior (raise a notice, or
don't accept non numeric values for string offsets at all).

-- 
Ferenc Kovács
@Tyr43l - http://tyrael.hu

Reply via email to