$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