stdClass as Array Error in PHP: Comparison and Solution

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Introduction: When Code Breaks Because of One Character



Imagine this situation: you are writing a PHP script that receives data from a third-party API. Everything works perfectly on the test server, but in production, a fatal error suddenly appears: "Cannot use object of type stdClass as array". Sound familiar? If you have ever worked with JSON, REST APIs, or databases in PHP, you have most likely encountered this tricky message.



This error is one of the most popular questions on Stack Overflow (thousands of views!), and for good reason. It occurs at the most inconvenient moment and stumps even experienced developers. In this article, we will break down why PHP complains about stdClass, compare two approaches to working with data (objects vs arrays), and show you how to forget this error forever.



What is stdClass and Why Is It "Not an Array"?



First, a quick primer. stdClass in PHP is a built-in empty class used as a universal container for data. When you call json_decode() without a second parameter, PHP returns an object of type stdClass. For example:



<?php$json = '{"name": "Anna", "age": 25}';$data = json_decode($json);var_dump($data); // object(stdClass)#1 (2) { ["name"]=> string(4) "Anna" ["age"]=> int(25) }?>


The error "Cannot use object of type stdClass as array" occurs when you try to access a stdClass object as if it were an array — using square brackets. For example:



<?php$json = '{"name": "Anna", "age": 25}';$data = json_decode($json);echo $data['name']; // Fatal error!?>


PHP is shouting: "Hey, this is an object, not an array! Use the arrow ->!" And it is right. Objects and arrays are different data types, even though they are similar in structure.



Comparison of Approaches: Object vs Array



Let's figure out how these two approaches differ and when to use which.



Approach 1: Working with stdClass Object



If you leave the data as an object, access to properties is done via ->:



<?php$json = '{"user": {"name": "Ivan", "skills": ["PHP", "JavaScript"]}}';$data = json_decode($json);echo $data->user->name; // Ivanecho $data->user->skills[0]; // PHP?>


Pros:

  • Clean code, reminiscent of working with classes
  • Better suited for strictly typed data
  • Less chance of accidentally changing the structure

Cons:

  • Cannot use array functions (array_map, array_filter, etc.)
  • More difficult to iterate over dynamic keys
  • Error when accessing via brackets — a common pitfall


Approach 2: Converting to an Array



You can force json_decode() to return an associative array by passing true as the second parameter:



<?php$json = '{"user": {"name": "Ivan", "skills": ["PHP", "JavaScript"]}}';$data = json_decode($json, true);echo $data['user']['name']; // Ivanecho $data['user']['skills'][0]; // PHP?>


Pros:

  • Access via square brackets is intuitive
  • Can use all array functions
  • Convenient for dynamic keys and loops

Cons:

  • Less type control (everything becomes mixed)
  • Not suitable for object-oriented code
  • Code becomes cumbersome with deep nesting


Typical Error Scenarios and Their Solutions



The error "Cannot use object of type stdClass as array" most often occurs in three situations. Let's break down each with examples.



Scenario 1: Forgot about the second parameter of json_d

Blogs

Book Recommendations