arrays are intent for holding values, not for represent things so use
objects for that.
the need for array_key_exists/isset to check for the presence of an index is
a smell that you need to refactor your code for a different datatype.

If you cannot change the array, you always can wrap it.

With good data abstractions the usage of array_key_exists/isset/empty is
barely reduced to the minimum.

 Martin Scotta


On Thu, Apr 14, 2011 at 10:12 AM, Ben Schmidt <mail_ben_schm...@yahoo.com.au
> wrote:

> There are two issues here.
>>>>>
>>>>>    1. Suppression of notice. I agree, it is best done only for array
>>>>>    keys. It's not hard to initialise a variable with $var=null at the
>>>>>    beginning of a code block to avoid such a notice, and that is the
>>>>>    appropriate way to do it for variables.
>>>>>
>>>>>    2. Offering a shortcut for the common idiom isset($x) ? $x : $y in
>>>>>    line with the DRY design principle. A notice would never be emitted
>>>>>    here in any case. The problem is that this idiom is still in wide
>>>>> use
>>>>>    despite the shortcut ternary operator already provided, because an
>>>>>    isset() check is different to a boolean cast.
>>>>>
>>>>> Some thoughts:
>>>>>
>>>>>    - The actual intent of 2. is probably $x!==null ? $x : $y i.e. it's
>>>>>      not about suppressing notices at all, but about offering a default
>>>>>      value, and the idiom quite probably only uses isset() because it
>>>>>      predated null in the language.
>>>>>
>>>>>    - If we view 2. in this way, the two problems are independent, and
>>>>> it
>>>>>      seems to me it would be best to solve them independently, rather
>>>>>      than with a single operator.
>>>>>
>>>>> So, I suggest:
>>>>>
>>>>>    1. An array lookup mechanism that suppresses the notice for
>>>>> undefined
>>>>>    keys. It would work the same as regular array index lookups except
>>>>>    that the notice for undefined keys (and only for undefined keys)
>>>>>    would not be generated (it would not just be hidden, but would never
>>>>>    be even generated).
>>>>>
>>>>>  http://news.php.net/php.internals/51877
>>
>> array_key_exists($key, $array) for arrays
>> array_key_exists($varname, get_defined_vars()) for locally scoped
>> variables.
>>
>
> Apart from being long and ugly, surely that is horribly inefficient.
>
>  No need to use @.
>>
>
> True. And I don't think anybody is. We all know @ is dangerous and nasty
> and don't use it. We're not seeking an alternative to @, we're seeking
> an alternative to repeating ourselves by using
> isset()/array_key_exists()/is_null() as well as the value being tested.
>
> But we don't want to do this in a blanket way similar to @ where a whole
> bunch of notices are suppressed. We want to specify precisely where
> missing values are allowable by indicating exactly which array index
> lookups may silently fail (and evaluate to null).
>
> Basically we don't want to make again the mistake that @ was.
>
>
>  Are they attempting to determine the existence of a variable/index
>> entry or are they attempting to determine if the variable/element is
>> null.
>>
>
> For me, existence and nullness are basically the same, and I think this
> is the common case. The whole point of being able to set something to
> null is to have a 'value' to represent 'unsetness'. This is why I think
> solving the conditional problem should use a !==null test. That gives
> the flexibility to use/pass null to represent 'unsetness' but doesn't
> pick up zero, false, etc. like a boolean cast does. Using
> array_key_exists() would remove that flexibility and be less useful.
>
> As far as silencing notices goes, the rationale is that basically we
> want to flag that 'null is OK, even if it's a fallback'. I.e. we don't
> care whether a value is null because it was set to null, or because null
> is a fallback because the variable was never defined. Either way, null
> is OK, so don't tell me about it.
>
> The conditional side lets us handle nulls nicely by providing our own
> defaults/fallbacks if it appears. The notice-suppression side lets us
> say that null is OK, even if that null itself is a fallback for
> 'undefined'. Quite often they will be used in combination, but they are
> independent.
>
>
>  I always declare my variables. So, I don't want to use isset() as they
>> will be an incorrect test. I use is_null(). Specifically testing the
>> value. If I've made a mistake and NOT declared the variable (or made a
>> typo), I want to know. I don't want to hide it with isset()/empty().
>>
>
> That's exactly why I think the conditional should use a !==null test,
> not an isset() test.
>
> Ben.
>
>
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to