What is the purpose of that generateHash function? It doesn't work in the
isset check.

Anyway, you can do a simple $a = array('foo'); isset($a[$x][$y][$z]) without
notices at all unless any of $x $y or $z are not defined, you don't need to
check the indexes one by one.

2011/4/14 Ole Markus With <olemar...@olemarkus.org>

> On Thu, 14 Apr 2011 02:24:56 +0200, Ben Schmidt <
> mail_ben_schm...@yahoo.com.au> wrote:
>
>  I think these shortcuts could be really useful for array elements, but
>>> for other variables I am really sceptical and I think they would do
>>> more harm than good. Generally I do not really see any reason why a
>>> variable should not be 'instanciated' before use.
>>>
>>> So
>>> +1 if this shortcut is implemented to only work for array elements.
>>> -1 for any other variable type.
>>>
>>
>> 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.
>>
>>
> I have never felt the need for a shortcut in these cases. It would be
> interesting to see some code where this would be practical.
>
>
>    - 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).
>>
>
> This is what I feel PHP is missing. Particularly when it comes to
> multi-dimensional arrays. Because this feature is missing I tend to do
> something like
>
> function generateHash($x, $y, $z)
> {
>  return "$x::$y::$z";
> }
>
> if (isset($a[generateHash($x, $y, $z)]) {
>  ...
> }
>
> instead of
>
> if (isset($a[$x]) && isset($a[$x][$y]) && isset($a[$x][$y][$z])) {
>  ...
>
> }
>
> Arguing about syntax is then a second step. However, my views on this
>> are:
>>
>>
> I think it best to avoid discussing the actual syntax before agreeing on
> what we really need.
>
> --
> Ole Markus With
> Systems Architect - Sportradar AS
> Developer - Gentoo Linux
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to