<?php
/* PHP devs, test & tell me I'm crazy. */
$x[] = '1';
if (empty($x[0]['x'])) {
echo 'No PHP bug.';
}
else {
echo 'PHP bug exists.';
}
?>
Run Code Online (Sandbox Code Playgroud)
我总是得到"PHP bug存在."
<?php
/* PHP devs, test & tell me I'm crazy. */
$x[] = 1;
if (empty($x[0]['x'])) {
echo 'No PHP bug.';
}
else {
echo 'PHP bug exists.';
}
?>
Run Code Online (Sandbox Code Playgroud)
输出"没有PHP错误."
<?php
/* PHP devs, test & tell me I'm crazy. */
$x[] = '1';
if (!isset($x[0]['x'])) {
echo 'No PHP bug.';
}
else {
echo 'PHP bug exists.';
}
?>
Run Code Online (Sandbox Code Playgroud)
输出"PHP bug存在."
<?php
/* PHP devs, test & tell me I'm crazy. */
$x[] = '1';
if (!isset($x[0]['hello world'])) {
echo 'No PHP bug.';
}
else {
echo 'PHP bug exists.';
}
?>
Run Code Online (Sandbox Code Playgroud)
输出"PHP bug存在."
这是因为您要为数组指定一个字符串.因此,xin $x[0]['x']会自动转换为0- 记住,第二个indes不指向数组,而是指向不能包含非数字索引的字符串.
$x[0][0] 确实存在 - 它是字符串的第一个字符.
$x[0][1]确实不存在,如果你更改相应的索引测试返回正确的结果:
if (isset($x[0][0])) echo "0 index is set.";
if (isset($x[0][1])) echo "1 index is not set.";
Run Code Online (Sandbox Code Playgroud)
课程:尽管可以像数组一样访问字符串,但它们不是数组.
PHP手册页中有关于解释行为的字符串的警告:
写入超出范围的偏移量填充带有空格的字符串.非整数类型转换为整数.非法偏移类型会发出E_NOTICE.负偏移在写入时发出E_NOTICE但读取空字符串.仅使用指定字符串的第一个字符.分配空字符串分配NULL字节.