WHAT IS METHOD CHAINING

Method chaining is a common syntax in object-oriented programming for invoking multiple method calls. The class methods must return the current object using the this keyword.

METHOD CHAINING EXAMPLES

  • Method chaining in Javascript
    function Client() {
    this.name = null;
    this.phone = null;
    }
    Client.prototype = {
    getName
    : function () {
    return this.name;
    },
    setName
    : function (value) {
    this.name = value;
    return this;
    },
    setPhone
    : function (value) {
    this.phone = value;
    return this;
    }
    };

    alert
    (new Client().setName('John Smith').setPhone('+1 (555) 123-4567').getName()); // prints John Smith
  • Method chaining in jQuery
    $('ul')
    .find('a:eq(1)')
    .addClass('active')
    .text('Test')
    .css('color', 'red')
    .show();
  • Method chaining in PHP
    <?php
    class Client {
    private $name;
    private $phone;

    public function setName($value) {
    $this
    ->name = $value;
    return $this;
    }

    public function setPhone($value) {
    $this
    ->phone = $value;
    return $this;
    }

    public function getName() {
    return $this->name;
    }
    }

    $client
    = new Client();
    echo $client
    ->setName('Jane Doe')->setPhone('+1 (546) 854-9551')->getName(); // prints Jane Doe
    ?>

METHOD CHAINING AND ERROR HANDLING

Throwing errors or returning boolean values from a method could break the chain, so proper error handling is a must.
function Client() {
this.error = null;
this.email = null;
this.birthday = null;
}
Client.prototype = {
getError
: function () {
return this.error;
},
hasError
: function () {
return this.error !== null;
},
getInfo
: function () {
return ['Send a mail to ', this.email, ' at ', this.birthday].join('');
},
setBirthday
: function (value) {
if (!/^d{4}-d{2}-d{2}$/.test(value)) {
this.error = 'Invalid ISO date.';
return this;
}
this.birthday = value;
return this;
},
setEmail
: function (value) {
if (!/[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,}/i.test(value)) {
this.error = 'Invalid email address';
return this;
}
this.email = value;
return this;
}
};

var client = new Client();
if (!client.setEmail('www.domain.com').setBirthday('1987-10-29').hasError()) {
console
.log(client.getInfo());
} else {
console
.log(client.getError());
}

CONCLUSION

Method chaining could be extremely useful when it comes to execution of multiple consecutive methods over a single object.