phpoopfluent-interfacechainable

PHP OOP: Chainable objects?


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!


Solution

  • 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.