$a = 'a';
echo isset($a['b']);
このコードは 1 を返します。
文字列の文字は、最初の文字に $a[0] のような構文を使用してオフセットで参照できます。
$string = 'Hello';
echo $string[1]; // echoes 'e'
そのため、PHP は $a が文字列であることを認識しています。「b」を数値にキャストし(0にキャストします)、最初の文字である$ a [0]でissetをテストしようとしていますa
エラーが有効になっている場合は、不正なオフセット 'b' 警告もスローする必要がありますが
編集
$a = 'a';
echo isset($a['b']), PHP_EOL;
echo $a['b'];
PHP5.3
1
a
PHP5.4
Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6
a
PHP5.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'];
b は 0 および $a[0] (0 の最初の文字 = a) に変換されるため、'a' を返します。
isset($a['b']);
$a['b'] は 'a' が null ではないため、true を返します
echo true;
true は文字列に変換され、これは "1" に変換されるため、"1" を出力します。
<?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
これと同じ理由で…
echo true;
PHP は非文字列/非整数をエコーできないため、true を 1 に、false を 0 に変換します。