Type Casting to array or object

While PHP can cast scalar values implicitly based on the current context, often casts are also performed explicitly – for instance to convert an integer value to a string. Not many developers know that PHP, in a somewhat limited way, also supports the casting of objects to arrays and back:

$obj = new stdClass;
$obj->property = 'hello world';

var_dump((array) $obj);

When executed, the above example will produce the following output:

array(1) {
  'property' =>
  string(11) "hello world"
}

The output is identical to that of get_object_vars() with the important difference that a cast is not limited by visibility, as the following example demonstrates:

class Sample
{
    private $property;

    public function __construct()
    {
        $this->property = 'hello world';
    }
}

$obj = new Sample;

var_dump((array) $obj);
var_dump(get_object_vars($obj));
array(1) {
  '\0Sample\0property' =>
  string(11) "hello world"
}

array(0) {
}

Casting an array to an object is also supported, with the hard limitation that only instances of stdClass are being created and only public properties can (easily) be accessed:

$data = [
    'property' => 'hello world'
];

$obj = (object) $data;
var_dump($obj->property);
string(11) "hello world"

As names of properties and variables may not be of numeric type but must be a string, casting an array with integer keys did lead to inaccessible – because technically invalidly named – properties in earlier versions of PHP. The behavior has been changed and integer keys are now get casted to string for casts from array to object and from string to integer when objects get casted to array.

Given that a property named '0' barely makes sense and previously was inaccessible, this change of behaviour should not have any practical impact in a real-world application.