Well, the question is somewhat misleading, because isset
returns true
for any variable that is not null
. Since $foo
is a string, and not an array, $foo["a"]
gives an Illegal string offset warning. PHP assumes that you meant to cast "a"
as an integer offset and does that implicitly, turning $foo["a"]
into $foo[0]
which gives you the string "h"
(the first offset of the string). Since the return value is another string the expression becomes "h"[0]
, which is just "h"
again.
So in other words, $foo["a"][0]
where $foo = "hello"
is the same thing as $foo[0][0]
which gives us "h"
.
But as far as non-existing array keys, isset
would definitely return false
since a non-existing key leads to a non-existing value which is implicitly null
.