開發 PHP 專案時,常遇到 Fatal error: Cannot use object of type stdClass as array 錯誤。這通常發生在將物件當作陣列存取時。本文透過實例解析原因與修正方法。
function get_userinfo($id) {
$sql = "Select * from @#_debbs where username='$id'";
$result = mysql_query($sql) or die('e');
if (mysql_num_rows($result)) {
$rs = mysql_fetch_object($result); // 取得物件
return array($rs['sex'], $rs['born'], $rs['reg_time'], '/boke/'.$rs['my_photo'], $rs['id']); // 錯誤:用陣列語法存取物件
} else {
return array('參數錯誤','未知','未知','未知','未知','未知');
}
}
mysql_fetch_object() 回傳的是 物件(stdClass),屬性存取需用 -> 運算子(如 $rs->sex),而非陣列語法 ['key']。程式碼第 7 行取得物件,第 8 行卻嘗試以陣列方式讀取屬性,導致致命錯誤。
將陣列存取改為物件屬性存取:
return array($rs->sex, $rs->born, $rs->reg_time, '/boke/'.$rs->my_photo, $rs->id);
或改用 mysql_fetch_assoc() 取得關聯陣列,即可維持原本陣列語法。
mysql_fetch_object():回傳物件,屬性對應欄位名。mysql_fetch_assoc():回傳關聯陣列,鍵值為欄位名。mysql_fetch_array():同時包含數值索引與關聯索引。根據需求選擇適當函式,避免型別不符錯誤。