PHP数组的奇怪行为

PHP数组的奇怪行为,php,arrays,Php,Arrays,我正在编写一个相册应用程序,遇到了一个奇怪的问题,这个问题似乎只在使用PHP5.5.6的生产服务器上出现,而在使用PHP5.4.7的开发机器上则没有。我想知道这个问题是否是因为新版本的PHP没有意识到一个特性或一个bug,两个服务器的配置不同,或者两者的组合 我在类数据中定义了以下函数: 对于给定的$key,此函数经过测试并正常工作 在调用代码中,我有以下内容: $album = Data::getAlbum ($_REQUEST ['key']); $page->bodyAppend (

我正在编写一个相册应用程序,遇到了一个奇怪的问题,这个问题似乎只在使用PHP5.5.6的生产服务器上出现,而在使用PHP5.4.7的开发机器上则没有。我想知道这个问题是否是因为新版本的PHP没有意识到一个特性或一个bug,两个服务器的配置不同,或者两者的组合

我在类数据中定义了以下函数:

对于给定的$key,此函数经过测试并正常工作

在调用代码中,我有以下内容:

$album = Data::getAlbum ($_REQUEST ['key']);
$page->bodyAppend ("> {$album ['album_name']} ");
执行$album变量的print_r显示数组中存在索引'album_name',从而意味着值$\u REQUEST['key']是一个有效键,并且方法Data::getAlbum按预期工作。但是,这段代码会在log:PHP notice:Undefined index:album_name in on line中生成一个通知

然而,奇怪的是,字符串是通过bodyAppend方法正确追加的,包括来自显然未定义索引的值

如果我将代码修改为:

$album = Data::getAlbum ($_REQUEST ['key']);
if (isset ($album ['album_name']))
{
    $page->bodyAppend ("> {$album ['album_name']} ");
}
或者如果我修改代码如下:

$album = Data::getAlbum ($_REQUEST ['key']);
if (count ($album) > 0)
{
    $page->bodyAppend ("> {$album ['album_name']} ");
}
有什么线索吗


我不反对高级检查是否存在密钥是一件好事,因此我很乐意在代码中留下我的修改-但这是我第一次遇到这种错误。

这是我学会识别的常见错误模式:

函数就是做它应该做的事情 函数正在抛出一个错误,这意味着它应该能够执行它应该执行的操作 这些问题过去一直困扰着我,但它们总是归结为以下几点:

$album = Data::getAlbum ($_REQUEST ['key']);
$page->bodyAppend ("> {$album ['album_name']} ");
不知怎的,我调用函数的次数比我想象的要多
浏览代码并查看调用函数的所有位置。在调用之前打印出参数。最有可能的是,您会发现调用函数的次数比原来想象的要多,而且参数在某种程度上是无效的。

一般提示:不要在数组引用中加空格$arr[]应为$arr[]以防止任何语法歧义。$album上的打印是否包含“album\u name”?你说它包含“相册密钥”。@MarcB-我这辈子都在做空格,所以我不太可能很快改变。你能演示一下语法歧义可能出现的地方吗?@Pang-是的,对不起:我现在就编辑。它包含了所有需要的信息,因为查询是SELECT*…至少在{}中,您正在讨论这个问题,但是echo$arr[key]将输出Array[key],而不是该数组的key的值。感谢您的响应。我首先尝试在方法本身内部使用一个简单的回显消息,每次调用该方法时都会发送输入参数。没有意外调用。如上所述,索引括号[]之前的空格可能有问题。试着去掉那些。括号没有效果。注释仅与解析不被{}包围的中间字符串变量相关。在我的测试中,将输出行更改为$page->bodyAppend$相册[‘相册名称’];也发出了同样的通知。