这是一个PHP错误吗?

mik*_*wn2 0 php debugging

<?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存在."

Pek*_*ica 8

这是因为您要为数组指定一个字符串.因此,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字节.