Take the 2-minute tour ×

In javascript you can easily create objects and Arrays like so:

var aObject = { foo:'bla', bar:2 };
var anArray = ['foo', 'bar', 2];

Are simialar things possible in PHP?
I know that you can easily create an array using the array function, that hardly is more work then the javascript syntax, but is there a similar syntax for creating objects? Or should I just use associative arrays?

$anArray = array('foo', 'bar', 2);
$anObjectLikeAssociativeArray = array('foo'=>'bla',

So to summarize:
Does PHP have javascript like object creation or should I just use associative arrays?

share|improve this question
Not that I'm aware.. And why would you want to? Javascript is so limited in comparison? Objects should be described properly, and with scope and hinting, etc. –  DreamWerx Jan 18 '09 at 20:11
add comment

9 Answers

up vote 19 down vote accepted

For simple objects, you can use the associative array syntax and casting to get an object:

$obj = (object)array('foo' => 'bar');
echo $obj->foo; // yields "bar"

But looking at that you can easily see how useless it is (you would just leave it as an associative array if your structure was that simple).

share|improve this answer
Hmm nice, well i can see some situations in which this could be usable, thanks! –  Sander Versluys Jan 18 '09 at 20:34
Yeah, in that case I might just as well use a normal associative array. –  Pim Jager Jan 18 '09 at 22:27
$goose->foo is much prettier than $goose['foo']. &#8756; useful. –  RyanM Sep 25 '12 at 5:05
add comment

There was a proposal to implement this array syntax. But it was declined.

Update    The shortened syntax for arrays has been rediscussed, accepted, and is now on the way be released with PHP 5.4.

But there still is no shorthand for objects. You will probably need to explicitly cast to object:

$obj = (object) ['foo'=>'bla', 'bar'=>2];
share|improve this answer
To bad it didn't make it. –  Pim Jager Jan 18 '09 at 22:30
This has been implemented in PHP 5.4. –  Tatu Ulmanen Oct 13 '11 at 11:20
@Tatu Ulemanen: Thanks, added it. –  Gumbo Oct 13 '11 at 11:37
@Gumbo the short array syntax uses => not :. Edited the answer for you. :) –  salathe Oct 13 '11 at 11:54
I wonder if a shorthand notation for objects will ever be implemented? I use stdClasses all the time, but they feel so awkward compared to javascript object literals. –  Mahn Aug 22 '12 at 13:00
show 1 more comment

Hi I came to this question by actually looking for an answer for it.

Further looking for a proper solution led me to a post from Stoyan Stefanov's blog.


For the impatient: (although you should really read the blog post), he proposes writing the following class:

class JSObject {
    function __construct($members = array()) {
        foreach ($members as $name => $value) {
            $this->$name = $value;

    function __call($name, $args) {
        if (is_callable($this->$name)) {
            array_unshift($args, $this);

Which then can be used like the following snippet he provides:

$fido = new JSObject(array(
    'name' => "Fido",
    'barks'=> true,
    'say'  => function($self) {
        if ($self->barks) {
            return "Woof";

echo $fido->say(); // "Woff"
share|improve this answer
add comment

As of PHP 5.4, you can do this:

$array = ['foo'=>'bla', 'bar'=>2];

It's not much shorter, but you'll appreciate it if you need to use a lot of hard coded nested arrays (which isn't altogether uncommon).

If you want an object, you would still need to cast each array:

share|improve this answer
add comment

Like the json_decode idea, wrote this:

function a($json) {
 return json_decode($json, true); //turn true to false to use objets instead of associative arrays

$cat = 'meow';

$array = a('{"value1":"Tester", 

share|improve this answer
add comment

According to the new PHP syntaxes,

You can use

$array = [1,2,3];

And for associative arrays

$array = ['name'=>'Sanket','age'=>22];

For objects you can typecast the array to object

$object = (object)['name'=>'Sanket','age'=>22];
share|improve this answer
add comment

There is no object shorthand in PHP, but you can use Javascript's exact syntax, provided you use the json_encode and json_decode functions.

share|improve this answer
add comment

The method provided by crescentfresh works very well but I had a problem appending more properties to the object. to get around this problem I implemented the spl ArrayObject.

class ObjectParameter extends ArrayObject  {
     public function  __set($name,  $value) {
        $this->$name = $value;

    public function  __get($name) {
      return $this[$name];

//creating a new Array object
$objParam = new ObjectParameter;
//adding properties
$objParam->strName = "foo";
//print name
//add another property
$objParam->strUser = "bar";

There is a lot you can do with this approach to make it easy for you to create objects even from arrays, hope this helps .

share|improve this answer
add comment

I don't believe so, but what would be the benefit of accessing the items like this:


instead of:

share|improve this answer
A lot, because it is way easier to type . than [''] –  Tom Schoffelen Apr 6 '13 at 11:51
add comment

Your Answer


