views:

126

answers:

3

Hi everybody,

I have tried to find a good introduction on chainable OOP objects in PHP, but without any good result yet.

How can something like this be done?

$this->className->add('1','value');
$this->className->type('string');
$this->classname->doStuff();

Or even: $this->className->add('1','value')->type('string')->doStuff();

Thanks a lot!

+16  A: 

The key is to return the object itself within each method:

class Foo {
    function add($arg1, $arg2) {
        // …
        return $this;
    }
    function type($arg1) {
        // …
        return $this;
    }
    function doStuff() {
        // …
        return $this;
    }
}

Every method, that returns the object itself, can be used as an intermediate in a method chain. See Wikipedia’s article on Method chaining for some further details.

Gumbo
Amazing how easy this was to do. Had no idea. Thanks a lot Gumbo!
Industrial
+11  A: 

just return $this in the add() and type() methods:

function add() {
    // other code
    return $this;
}
Victor Stanciu
+5  A: 

Another term for this is the Fluent Interface

Mark Baker
Adding a note: method chaining is but one technique in creating a fluent interface.
koen