Bir çoğunuz yazılmış sınıfları incelediğinizde şu şekilde bir yazım tarzıyla karşılaşmış olabilirsiniz.
$text = new Text(); echo $text->write('Tayfun Erbilen')->color('red')->fontSize('20px')->show();
Bu örneğe ait sınıfımızı oluşturalım hemen.
class Text { private $text; private $style; public function write($text) { $this->text = $text; } public function color($color) { $this->style .= 'color: ' . $color . ';'; } public function fontSize($size) { $this->style .= 'font-size: ' . $size . ';'; } public function show() { return '<div style="' . $this->style . '">' . $this->text . '</div>'; } }
Ancak bu örnek hata verecektir. Çünkü bu şekilde bir yazım tarzı için yapmanız gereken $this objenizi geriye döndürmek. Yani sınıfımızı şu şekilde düzenlersek eğer;
class Text { private $text; private $style; public function write($text) { $this->text = $text; return $this; } public function color($color) { $this->style .= 'color: ' . $color . ';'; return $this; } public function fontSize($size) { $this->style .= 'font-size: ' . $size . ';'; return $this; } public function show() { return '<div style="' . $this->style . '">' . $this->text . '</div>'; } }
Artık bu şekilde bir kullanımı yapmaya hazırız.
Chain (zincirleme) metodu aynı zamanda jQuery içinde aynı mantıkta çalışır. Muhtemelen her dil için bu mantıktadır. Örneğin jQuery’de bir örnek vermem gerekirse, basit bir eklenti hazırlayalım.
$.fn.Text = function(text){ $(this).html(text); }; $('body').Text('Tayfun Erbilen').css({ 'color': 'red', 'font-size': '20px' });
Bu şekilde bir zincirleme kullanımda çalışmayacaktır. Çünkü bir this objesi döndürmedik eklentimizde geriye. Eğer geriye this’i döndürürsek geriye kalan jQuery metodlarını da zincirleme olarak kullanabilirsiniz. O halde buna göre düzelttiğimizde son kod parçamız şöyle olacak;
$.fn.Text = function(text){ $(this).html(text); return this; }; $('body').Text('Tayfun Erbilen').css({ 'color': 'red', 'font-size': '20px' });