首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP「Cannot use object of type stdClass as array」錯誤原因與解決

     編輯:PHP 相關知識

錯誤訊息

Fatal error: Cannot use object of type stdClass as array in ...

錯誤原因

資料庫查詢結果預設回傳 **物件陣列**(`stdClass`),而非關聯陣列。嘗試用陣列語法 `$row['field']` 存取物件屬性會觸發此錯誤。

錯誤示範

$query = $this->db->query("SELECT * FROM articles");
$rows = $query->result(); // 預設回傳 stdClass 物件陣列

// ❌ 錯誤寫法
echo $rows[0]['title'];  // stdClass 不能當陣列用

正確存取方式

方式一:物件語法(預設 result())

// ✅ 正確
echo $rows[0]->title;
echo $rows[0]->content;

方式二:強制回傳關聯陣列

// 方法 A:result_array()
$rows = $query->result_array();
echo $rows[0]['title']; // ✅ 正常

// 方法 B:row_array() 單筆
$row = $query->row_array();
echo $row['title'];

CodeIgniter 完整對照表

方法回傳型別存取語法適用場景
result()array of stdClass$row->field多筆、習慣物件語法
result_array()array of array$row['field']多筆、需陣列操作/JSON
row()stdClass / null$row->field單筆、物件語法
row_array()array / null$row['field']單筆、陣列語法

常見情境:foreach 迴圈

// 物件寫法
foreach ($query->result() as $row) {
    echo $row->title;
}

// 陣列寫法
foreach ($query->result_array() as $row) {
    echo $row['title'];
}

除錯技巧

// 確認變數型別
var_dump($rows[0]);
// 輸出: object(stdClass)#1 (3) { ["id"]=> string(1) "1" ["title"]=> string(6) "標題" ... }

最佳實務建議

  1. 統一專案風格:團隊約定使用 `result_array()` + 陣列語法,或 `result()` + 物件語法,避免混用。
  2. Model 封裝:在 Model 方法統一轉換,Controller 僅處理陣列。
    public function get_articles() {
        return $this->db->get('articles')->result_array();
    }
  3. API 輸出:直接 `json_encode($query->result_array())`,無需額外轉換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved