I can agree that implementing ?? with isset() and not array_key_exists()
would be acceptable... but empty() is a blunt compromise and much less
used... The general problem is the notice being thrown when array indexes
doesn't exist - which results in code duplication when you deal with it
nicely. empty() tries to be a generic solution but there will always be
people that has some other special definition of "emptiness" like "array
that contains a single null value" and they need to write the code that
defines that particular comparison anyway.

You can't have a solution that makes everything easier for everyone so let's
solve one thing at a time and start with the most generic problem
specifically and not all minor problems that happens to partially intersect
that one.

~Hannes


On 14 April 2011 16:26, Ben Schmidt <mail_ben_schm...@yahoo.com.au> wrote:

> On 15/04/11 12:05 AM, Hannes Landeholm wrote:
>
>> Trying to summarize this discussion... I think we can all agree that the
>> main problem is "code duplication for array access when parameters are
>> possibly not existing".
>>
>
> For me the problem is 'code duplication when a value might be null'
> (whether an array, variable or something else, and regardless of whether
> it was set to null, or not defined at all).
>
>
>  I think we all can also agree that @ can be both used properly and
>> misused - and it is a blunt tool and not a nice solution to the
>> previously stated problem.
>>
>
> Yes.
>
>
>  Some suggested that the ternary if comparison should suppress the notice
>> automatically. This would break existing code and also be confusing since
>> people expect a ternary if and normal if to work the same way.
>>
>
> Yes.
>
>
>  Some suggested ?? as an array access operator that suppresses the notice
>> and
>> has 3 variants: A: nothing specified - uses null as default, B: has
>> default
>> specified, C: returns X if index exists or Y if index doesn't exist. This
>> effectively solves the code duplication problem and is a shortcut for
>> saying
>> "the array index may or may not exist".
>>
>
> This only works if the test is made an isset() kind of test. If it
> remains a boolean cast, it doesn't help much. (Or at least it doesn't
> help me much.)
>
> I also think it's a bit too blunt. In all but the simplest expressions
> in the condition, desired notices could be silenced. I like the idea of
> being able to specify exactly which array lookups should be silenced.
>
> It also doesn't help the people who want an isset() style test, but
> without the notice suppression, and I think there are a few people in
> that category.
>
>
>  One person said that the relation between ? and ?? and == and === would
>> make
>> the operator non-intuitive. Other people disagreed and claimed the
>> opposite.
>>
>> So basically the discussion now is what exact characters that should be
>> used
>> to represent this operator? I really hope we can get this implemented
>> quickly... I worked with $_POST yesterday and I could really use that ??
>> operator.
>>
>
> I still don't think we've reached agreement on exactly what we need.
> Your summary seems to me to be of some of the earliest and least
> developed ideas. I think the discussion has moved in a number of
> interesting directions since then and we should draw on that later work.
>
> Ben.
>
>
>
>

Reply via email to