Chainen met de Factory() methode
Tegenwoordig maken de meeste frameworks (zowel PHP als Javascript) er gebruik van: chainen. Het is handig, verkort je code en maakt de code leesbaarder (mits netjes uitgelijnd).
Probleem: new ClassName()
Een probleem ontstaan wanneer je een nieuwe instantie wilt creëren en direct wilt chainen.
PHP voorbeeld:
$view = new View( 'home.php' );
$view->set_var( 'title', 'Mooie site' )
->render();
JavaScript voorbeeld:
var el = new DomSelect( '#button' ); el.setWidth( '100px' ) setHeight( '30px' );
Oplossing: factory() functie
De oplossing voor dit probleem is het creëren van een factory functie. Het idee is dat binnen de factory functie een nieuwe instantie wordt aangemaakt en deze wordt geretourneerd. Hierdoor kun je direct de “chain” starten na de aanroep van factory().
$view = view_factory( 'home.php' )
->render();
Statische methode
De mooiste manier is om hiervan een statische methode te maken binnen de betreffende class. Je kunt dan een instantie aanmaken met Class::factory(). Hieronder volgt een implementatie in PHP en JavaScript.
PHP implementatie
Factory methode maken in PHP:
class View {
// constructor
public function __construct( $file_name ) {
// code...
}
public function set_var( $key, $value ) {
// code...
}
public function render() {
// code...
}
public static function factory( $file_name ) {
// create instance
$view = new View( $file_name );
// return instance for chaining
return $view;
}
}
Voorbeeld gebruik van de methode:
$view = View::factory( 'home.php' )
->set_var( 'title', 'Mooie site' )
->render();
JavaScript implementatie
Factory methode in JavaScript:
// constructor
function DomSelect( selector ) {
// code....
};
DomSelect.prototype = {
setWidth: function ( width ) {
// code...
},
setHeight: function ( height ) {
// code...
}
};
DomSelect.factory = function ( selector ) {
// create instance
var domSel = new DomSelect( selector );
// return instance for chaining
return domSel;
}
Voorbeeld gebruik van de methode:
var el = DomSelect.factory( '#button' )
.setWidth( '100px' )
.setHeight( '30px' );












Thanks a lot, you saved my day !