Ну, вопрос несколько вводит в заблуждение, потому что isset
возвращает true
для любой переменной, которая не является null
. Поскольку $foo
является строкой, а не массивом, $foo["a"]
дает Недопустимое смещение строки предупреждение. PHP предполагает, что вы хотели бы отличить "a"
как целочисленное смещение и делает это неявно, превращая $foo["a"]
в $foo[0]
, который дает вам строку "h"
(первое смещение строки). Так как возвращаемое значение является другой строкой, выражение становится "h"[0]
, которое снова равно "h"
.
Таким образом, $foo["a"][0]
, где $foo = "hello"
- это то же самое, что и $foo[0][0]
, что дает нам "h"
.
Но насколько несуществующие ключи массива, isset
определенно вернется false
поскольку несуществующие клавиши приводят к несуществующему значению, которое неявно null
.
'var_dump ($ foo ['a'] [0])' –
также найден на http://phpfiddle.org/ с этим кодом '$ foo = 'hello'; echo isset ($ foo ['a'])? 'yes 2': ""; // возвращает false - OK echo isset ($ foo ['a'] ['b'])? 'yes 3': ""; // возвращает false - OK echo isset ($ foo ['a'] [0])? 'yes 4': ""; ' –
, но foo is string not array –