我正在寫一個相冊應用程序,並遇到一個好奇的問題,這似乎只在我的生產服務器上使用PHP 5.5.6而不是在我的PHP 5.4.7開發機器上。我想知道這個問題是否是由於新版本的PHP(不知道功能或錯誤),兩臺服務器的配置是不同的還是兩者的組合。PHP陣列的好奇行爲
我有Data
類中定義如下功能:
public static function getAlbum ($key)
{
$stmt = self::$db->prepare ("SELECT * FROM `albums` WHERE `album_key` = ?;");
$stmt->execute (array ($key));
$rows = $stmt->fetchAll (PDO::FETCH_ASSOC);
if (array_key_exists (0, $rows))
{
return $rows [0];
}
else
{
return array();
}
}
對於給定的$key
,該功能測試和工程。
在調用代碼,我有以下:
$album = Data::getAlbum ($_REQUEST ['key']);
$page->bodyAppend ("> {$album ['album_name']} ");
執行的$album
可變的print_r
表明索引'album_name'
是數組中存在的,從而意味着該值$_REQUEST ['key']
是一個有效的鍵和方法Data::getAlbum
按預期工作。但是,此代碼會在日誌中生成通知:PHP Notice: Undefined index: album_name in <<filename>> on line <<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']} ");
}
任何線索?
我並不認爲先檢查密鑰的存在是件好事(所以我很樂意在代碼中留下我的修改) - 但這是我第一次遇到這種類型的問題的錯誤。
一般提示:不要在您的數組引用中放入空格。 '$ arr []'應該是'$ arr []'以防止任何語法歧義。 –
'$ album'上的'print_r'是否包含''album_name''?你說它包含「album_key」。 – Pang
@MarcB - 我已經完成了我的整個生活中的空間之前的事情,所以它不太可能會很快改變。你能舉一個演示語法歧義可能出現嗎? – Philip