PHP isset для элемента массива, в то время как переменная не является массивом

$a = 'a'; echo isset($a['b']); 

Этот код возвращает 1. Почему?

Символы String могут ссылаться на их смещение, используя синтаксис, например $ a [0] для первого символа, например

 $string = 'Hello'; echo $string[1]; // echoes 'e' 

поэтому PHP распознает, что $ a является строкой; отбрасывая «b» на числовое значение (которое отличает 0) и пытается проверить isset на $ a [0], что является первым символом a

Хотя это также должно вызывать предупреждение о недопустимом смещении 'b', если у вас есть ошибки

РЕДАКТИРОВАТЬ

 $a = 'a'; echo isset($a['b']), PHP_EOL; echo $a['b']; 

PHP 5.3

 1 a 

PHP 5.4

 Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6 a 

PHP 5.5

 PHP Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6 Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6 a 

Только для php 5.3:

поэтому давайте сделаем это медленно:

 $a['b']; 

возвращает 'a', потому что b преобразуется в 0 и $ a [0] (первый символ 0 = a)

 isset($a['b']); 

return true, потому что $ a ['b'] является 'a' не null

 echo true; 

выдает «1», потому что true преобразуется в строку, а это – в «1».

потому что ISSET возвращает 1, если значение установлено.

Используйте его так:

 if(isset($a['b']){ echo $a['b']; } 

По той же причине, что и …

 echo true; 

PHP не может повторять нестрочный / нецелый, поэтому он преобразует true в 1 и 0 для false.

 <?php $a = 'a'; var_dump($a); ?> it will gives output string(1) "a" if you will echo $a['b'] it will give you output as a so $a['b'] also has value hence <?php $a = 'a'; echo isset($a['b']); ?> outputs value 1