<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>&#60;?blog &#187; wzorce projektowe</title>
	<atom:link href="https://blog.visionsoftware.pl/tag/wzorce-projektowe/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.visionsoftware.pl</link>
	<description>...nie tylko o programowaniu</description>
	<lastBuildDate>Sun, 23 Mar 2014 19:23:43 +0000</lastBuildDate>
	<language>pl-PL</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Method chaining w PHP</title>
		<link>https://blog.visionsoftware.pl/programowanie-php/method-chaining-w-php.html</link>
		<comments>https://blog.visionsoftware.pl/programowanie-php/method-chaining-w-php.html#comments</comments>
		<pubDate>Tue, 31 Jul 2012 20:03:08 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[fluent interface]]></category>
		<category><![CDATA[method chaining]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programowanie obiektowe]]></category>
		<category><![CDATA[wzorce projektowe]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=617</guid>
		<description><![CDATA[Zawarta  w tytule nazwa określa implementację wzorca Fluent interface, który odpowiednio zastosowany może uprościć i skrócić tworzony kod. Użycie Method chaining umożliwia cykliczne wywoływanie metod dla obiektu bez jawnego podawania go za każdym razem. Stąd właśnie wzięła się nazwa tej techniki, gdyż wygląda to jak łańcuszek. Jak wygląda uzycie Method chaining w praktyce? Jest on stosowany w wielu różnych językach, a webdeveloperzy mogą go znaleźć między innymi w jQuery lub frameworkach PHP. Upraszcza to znacznie [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Zawarta  w tytule nazwa określa implementację wzorca Fluent interface, który odpowiednio zastosowany może uprościć i skrócić tworzony kod. Użycie Method chaining umożliwia cykliczne wywoływanie metod dla obiektu bez jawnego podawania go za każdym razem. Stąd właśnie wzięła się nazwa tej techniki, gdyż wygląda to jak łańcuszek.<span id="more-617"></span></p>
<h3>Jak wygląda uzycie Method chaining w praktyce?</h3>
<p>Jest on stosowany w wielu różnych językach, a webdeveloperzy mogą go znaleźć między innymi w jQuery lub frameworkach PHP. Upraszcza to znacznie tworzenie kodu, co można zobaczyć na poniższym przykładzie:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;p&quot;).removeClass(&quot;class&quot;)
	.addClass(&quot;another_class&quot;)
	.css(&quot;color&quot;,&quot;red&quot;)
	.fadeOut(&quot;slow&quot;);
</pre>
<h3>Jak zaimplementować Method chaining w PHP?</h3>
<p>Bardzo podobnie możemy powyższe rozwiązanie wykorzystać w PHP. Jest to niezwykle proste do osiągnięcia, wystarczy, że poszczególne wywoływane metody będą zwracały cały obiekt. Przez to nie będzie trzeba go podawać za każdym razem, lecz utworzyć odpowiedni łańcuch.</p>
<p>Na poniższym przykładzie przedstawiono implementację Method chaining. Jest to klasa bardzo uproszczonego kalkulatora, dzięki któremu możemy wykonywać podstawowe działania matematyczne.</p>
<pre class="brush: php; title: ; notranslate">
class Calculator{
	private $_result = 0;

	public function __construct($value = 0) {
		$this-&gt;_result = $value;
		return $this;
	}

	public function add($value){
		$this-&gt;_result+=$value;
		return $this;
	}

	public function subtract($value){
		$this-&gt;_result-=$value;
		return $this;
	}

	public function multiply($value){
		$this-&gt;_result*=$value;
		return $this;
	}

	public function divide($value){
		$this-&gt;_result/=$value;
		return $this;
	}

	public function getResult(){
		return $this-&gt;_result;
	}
}
</pre>
<p>Implementacja Metchod chaining kryje się w wywołaniu <code>return $this</code> na końcu każdej metody odpowiedzialnej za działania matematyczne. Dzięki temu będzie możliwe niezwykle proste wykonanie obliczeń:</p>
<pre class="brush: php; title: ; notranslate">
$calc = new Calculator(5);
print $calc-&gt;add(2)
		-&gt;subtract(1)
		-&gt;divide(2)
		-&gt;multiply(3)
		-&gt;getResult();
</pre>
<h3>Pominięcie osobnego tworzenia obiektu</h3>
<p>Możliwe jest także zastosowanie Method chaining bezpośrednio przy wywołaniu obiektu, dzięki czemu nie będziemy musieli tworzyć go w osobnej linii. Wystarczy w tym celu dodać do klasy <code>Calculator</code> statyczną metodę <code>start()</code>, która zwróci nam utworzony obiekt:</p>
<pre class="brush: php; title: ; notranslate">
public static function start($value = 0){
	return new Calculator($value);
}
</pre>
<p>Dzięki takiemu rozwiązaniu możemy jeszcze bardziej uprościć wywołanie kalkulatora:</p>
<pre class="brush: php; title: ; notranslate">
print Calculator::start(5)-&gt;add(4)-&gt;divide(3)-&gt;getResult();
</pre>
]]></content:encoded>
			<wfw:commentRss>https://blog.visionsoftware.pl/programowanie-php/method-chaining-w-php.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
