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 > >