5 ms·
The implementation of higher-order functions in PHP has saved me hundreds if not thousands of lines of code, and that's only in the last six months. It's not p
by debacle 14y ago
The implementation of higher-order functions in PHP has saved me hundreds if not thousands of lines of code, and that's only in the last six months.
It's not perfect, but it's better than what we had before.
- xd 14y agoIf you're talking about PHP's anonymous functions then yes I agree they have made life a lot easier. I was talking more about projects like Swiftmailer for instance, example: // Create a message $message = Swift_Message::newInstance('Wonderful Subject') ->setFrom(array('john@doe.com' => 'John Doe')) ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) ->setBody('Here is the message itself') ;
- debacle 14y agoThat's called a 'fluent interface.' It's useful in some instances, and is a bit different than currying because PHP doesn't really support proper currying.
- xd 14y agoAh, I thought they where going for functional as that's the response I got when talking to one of their developers about it.
- debacle 14y agoThat's probably because their developers didn't know what they were talking about.
- Gigablah 14y agoI suspect xd doesn't either.
- xd 14y agoNice. Are you trying to tell me that that example doesn't appear to try and avoid state?
- rads 14y agoThat example is full of state. There's nothing to prevent you from calling any of those setX methods at a later point in time and changing the object's state. That interface very well could avoid state, but Swiftmailer doesn't seem to be implemented in that way. [1] The stateless way would be to return an entirely new Swift_Message instance with each setX method. In languages that aren't built with immutability in mind, like PHP and Java, you end up instantiating and throwing away a lot of objects. Sometimes it doesn't matter, but when it does you use a mutable Builder to create the immutable instances. [1] http://swiftmailer.org/docs/messages.html http://swiftmailer.org/docs/messages.html
- xd 14y agoThat example is full of state. That's why I said it appears to try and avoid state. Either way, as far as I'm concerned it's an horrific way to write code in an imperative language such as PHP.
- mhitza 14y agoI beg to disagree. It's a variation of the builder pattern and I find it quite useful, thank you.
- true_religion 14y agoNot to me. setX is reminicent of Java to me, and of small talk attribute setters/getters before it. Both of those languages elevate state to the point of godhood.
- xd 14y agoIt's not about the setters/getters directly, it's the way they are being called by returning references to the parent object in each method call.
- grogs 14y agoThis looks exactly like Smalltalk's cascading; just allows you to not repeat $message loads of times. To me it's a useful feature which I often would like when working with lots of Java libraries.