4 ms·
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 time
by Udo 15y ago
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.
Edit: it was PHP 5.3, not 5.2
- phpnode 15y agoNitpick: Closures are a 5.3 feature. 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.
- Udo 15y agoThanks 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.
- exDM69 15y agoIf 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.