<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://mirmodynamics.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Mirmo Dynamics - Tag - SPL</title>
  <link>http://mirmodynamics.com/</link>
  <atom:link href="http://mirmodynamics.com/feed/tag/SPL/rss2" rel="self" type="application/rss+xml"/>
  <description>Si tu kiffes pas reunoi, t'écoutes pas et puis c'est tout.</description>
  <language>en</language>
  <pubDate>Sun, 14 Mar 2010 19:59:01 +0100</pubDate>
  <copyright>2003-2009 &amp;copy; Geoffrey Bachelet</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Collections, Object Chaining, et la vérité sur le Père Noël</title>
    <link>http://mirmodynamics.com/post/2006/11/29/Collections-Object-Chaining-et-la-verite-sur-le-Pere-Noel</link>
    <guid isPermaLink="false">urn:md5:e7c45d491281466d693e2b556945606a</guid>
    <pubDate>Wed, 29 Nov 2006 23:09:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>clichés</category><category>php</category><category>rigolo</category><category>SPL</category><category>surclassage</category><category>zend framework</category>    
    <description>    &lt;p&gt;Aujourd'hui je vais vous parler de deux concepts que j'aime beaucoup et que j'ai (re)découverts en travaillant sur mon projet personnel de conquête de l'univers: les Collections d'objets et l'Object Chaining.&lt;/p&gt;


&lt;p&gt;Les collections, qui sont peut-être finalement un design pattern connu sous un autre nom, permettent d'executer aisément des méthodes sur plusieurs objets (une collection d'objets quoi). Concrétement, disons qu'on à une classe &lt;code&gt;My_Collection&lt;/code&gt;, qui implémente les interfaces &lt;code&gt;Iterator&lt;/code&gt; (et &lt;code&gt;Countable&lt;/code&gt; tant qu'a faire) de la &lt;acronym&gt;SPL&lt;/acronym&gt;, ainsi que la fonction magique &lt;code&gt;__call&lt;/code&gt; suivante (je vous fait grace du docblock):&lt;/p&gt;

&lt;pre&gt;
class My_Collection implements Iterator, Countable {
	public function __call($method, $args) {
		$calls = 0;
		foreach($this as $item) {
			if (method_exists($item, $method)) {
				call_user_func_array(array($item, $method), $args);
				$calls++;
			}
		}
		if ($calls &amp;gt; 0) {
			return $this;
		} else {
			throw new My_Collection_Exception('Method catched but could not be called: '.$method);
		}
	}
}
&lt;/pre&gt;


&lt;p&gt;Ce &lt;em&gt;dispositif&lt;/em&gt; permet d'utiliser le genre de code suivant (si les objets de la collection le permettent, bien évidemment, et disons qu'ici ce sont des objets représentant des images, supportant les méthodes &lt;code&gt;move&lt;/code&gt; et &lt;code&gt;createThumbnail&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;
# $array contient les objets My_Image
$collection = new My_Collection($array);
$collection-&amp;gt;move('/new/path/')-&amp;gt;createThumbnail();
&lt;/pre&gt;


&lt;p&gt;Ce qui, comme vous l'aurez deviné, déplacera les fichiers de la collection vers &lt;code&gt;/new/path&lt;/code&gt;, puis en créera des miniatures.&lt;/p&gt;


&lt;p&gt;Deuxième chose, l'Object Chaining. On vient de le voir en fait, ça consiste à &lt;em&gt;chainer&lt;/em&gt; les appels de méthodes grâce à un subtil &lt;code&gt;return $this;&lt;/code&gt;, qui retourne donc une référence à l'objet courant. Exemple pratique, dans le Zend Framework, en étendant &lt;code&gt;Zend_View&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;
class My_View extends Zend_View {
	public function assign($spec) {
		$args = func_get_args();
		call_user_func_array(array('parent', 'assign'), $args);
		return $this;
	}
}
&lt;/pre&gt;


&lt;p&gt;Ce qui autorise le genre de code suivant (en admettant que vous ayiez une instance de &lt;code&gt;My_View&lt;/code&gt; dans le registre):&lt;/p&gt;

&lt;pre&gt;
Zend::registry('view')
	-&amp;gt;assign('foo', $foo)
	-&amp;gt;assign('foo', $bar)
	-&amp;gt;render('template.php');
&lt;/pre&gt;


&lt;p&gt;Et là c'est fort, parceque ça rejoint fortement &lt;a href=&quot;http://fashion.hosmoz.net/blog/post/2006/01/28/489-considerations-nocturne-sur-php&quot;&gt;quelque chose dont je parlais en janvier dernier&lt;/a&gt; (le truc qui parle de &lt;code&gt;with&lt;/code&gt;), et donc j'en déduis une chose formidable: &lt;strong&gt;Le père noël existe&lt;/strong&gt;, et il m'a entendu. Merci Santa Copain.&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2006/11/29/Collections-Object-Chaining-et-la-verite-sur-le-Pere-Noel#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2006/11/29/Collections-Object-Chaining-et-la-verite-sur-le-Pere-Noel#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/728</wfw:commentRss>
      </item>
    
</channel>
</rss>