2016-08-28 1 views
1

я думал, что я знал все о PHP, пока я не наткнулся на это:PHP - Исеть возвращает истину несуществующего массива ключевого

$foo = 'hello'; 
isset($foo['a']);  // returns false - OK 
isset($foo['a']['b']; // returns false - OK 
isset($foo['a'][0]); // returns true! WTF?! 

Может кто-нибудь объяснить мне результат 4-й линии? Протестировано с помощью php 5.5.36.

+0

'var_dump ($ foo ['a'] [0])' –

+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': ""; ' –

+0

, но foo is string not array –

ответ

5

Ну, вопрос несколько вводит в заблуждение, потому что 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.

+0

Legit. https://3v4l.org/vehe6#v540 –

 Смежные вопросы

  • Нет связанных вопросов^_^