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

このコードは 1 を返します。

4

5 に答える 5

7

文字列の文字は、最初の文字に $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
于 2013-08-23T09:30:45.830 に答える
2

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" を出力します。

于 2013-08-23T09:36:32.340 に答える
0
<?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
于 2013-08-23T09:52:37.230 に答える
0

これと同じ理由で…

echo true;

PHP は非文字列/非整数をエコーできないため、true を 1 に、false を 0 に変換します。

于 2013-08-23T09:29:14.350 に答える