This is made possible by the introduction of closures in PHP 5.3 which I think was long overdue. However, in this specific case it's worth noting that many times in JavaScript objects declared like this
var fido = {name: "Fido", barks: true};
are not actually used as objects but instead emulate a name-value container - and this is a piece of functionality that PHP already supports natively due to its array type. Of course it's nice that you can now assemble objects on the fly, but people coming from JavaScript should be reminded that it's not necessary to use PHP objects in this fashion most of the time.
The fact is, this is a fancy, but horrible way to construct your objects if you care about performance at all. It also breaks things like typehints, instanceof, inheritance etc.
Thanks for the correction. Sometimes new things feel like they've been around for an eternity ;-)
I absolutely agree with you, that's basically why I wrote the comment. Just looking at their PHP code, you can sometimes see very clearly in what language people were thinking at the time. Some people try to emulate Java, JavaScript, even C or C++ sometimes. It's always horrible.
If we forget about PHP for a while, I really like this way of constructing objects by using dictionaries (or environments or hash tables) and closures.
In fact, I would prefer that in a dynamic language, it would be the only way of constructing objects. I don't see much point in having classes in a language like Javascript, PHP or Python and I almost never use inheritance in these languages. Stuff like instanceof is a bad match for duck typing. Single dispatch method invocation adds very little value to a language that is already ducktyped.
yeah this port relies heavily on php.js, it's part of the reason it's abandoned, with all the libs it just becomes too big for client side apps, and it sits in some kind of uncanny valley that is really nearly the same as the equivalent php but not quite.
They are introducing shorthand notation for arrays in PHP 5.4 using the [] syntax. For whatever crazy reason using {} notation hasnt been implemented for objects. I really wonder what the phpinternals team are doing sometimes.
And, of course, NodeJS is available at every web hosting company on the planet for $3.99 a month, so your client will be happy about the ubiquity of the environment and the cost of getting something off the ground. Isn't it?
You can choose not to like PHP easily. Choosing not to use it is not nearly as simple. And "ew" is not much of an argument to take to a client who isn't gambling on being the Next <insert poster child>.
Edit: it was PHP 5.3, not 5.2