<?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>web-memento &#187; PHP</title>
	<atom:link href="http://www.web-memento.fr/categories/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.web-memento.fr</link>
	<description>Cahier(s) d&#039;un développeur web</description>
	<lastBuildDate>Mon, 21 Jun 2010 08:08:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Les interfaces dans PHP5</title>
		<link>http://www.web-memento.fr/les-interfaces-dans-php5</link>
		<comments>http://www.web-memento.fr/les-interfaces-dans-php5#comments</comments>
		<pubDate>Sat, 13 Feb 2010 20:10:07 +0000</pubDate>
		<dc:creator>Luc</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Objet]]></category>
		<category><![CDATA[POO]]></category>
		<guid isPermaLink="false">http://www.web-memento.fr/?p=574</guid>
		<description><![CDATA[PHP dans sa version 5 introduisait un modèle objet plus robuste que dans sa version 4 lui permettant de quasiment rivaliser avec des langages plus évolués comme java ou c/c++. C&#8217;est quoi une interface ? En programmation objet, une interface permet de définir les méthodes publiques qu&#8217;une classe doit implémenter. Le fait qu&#8217;une classe implémente [...]]]></description>
			<content:encoded><![CDATA[<p><acronym title="Pre-Hypertext Processing">PHP</acronym> dans sa version 5 introduisait un <strong>modèle objet plus robuste</strong> que dans sa version 4 lui permettant de <span style="text-decoration: line-through;">quasiment</span> rivaliser avec des langages plus évolués comme java ou c/c++.</p>
<h2>C&#8217;est quoi une interface ?</h2>
<p>En programmation objet, une interface permet de définir<strong> les méthodes publiques qu&#8217;une classe doit implémenter</strong>. Le fait qu&#8217;une classe implémente une interface<strong> l&#8217;oblige à disposer au minimum des méthodes</strong> décrites dans cette interface au quel cas une <strong>erreur fatale</strong> sera levée.</p>
<p>Cela permet de définir une <acronym title="Application Programming Interface">API</acronym> (<em>Application Programming <strong>Interface</strong></em>) qu&#8217;un composant pourra utiliser.</p>
<h2>Les interfaces définies par PHP5</h2>
<p>PHP5 propose différentes interfaces permettant de répondre à des demandes assez répandues : <strong>compter</strong>, <strong>sérialiser</strong>, <strong>traverser</strong>,  <strong>itérer</strong>, &#8230;</p>
<p>Pour présenter les interfaces proposées par PHP5, je baserai mes exemples sur la classe suivante :</p>
<pre class="brush: php;">
class myObject {
  protected $_data = array( 'un', 'deux', 'trois' );
}
</pre>
<p>Cette classe implémentera au fur et à mesure de l&#8217;article les interfaces présentées.</p>
<h3>Countable : une interface pour compter</h3>
<p><strong>Objectif</strong> : permettre à un objet d&#8217;être utilisé avec la fonction <span class="code">count()</span> (ou <span class="code">sizeof()</span>)</p>
<p>La signature de l&#8217;interface <a title="L'interface Countable" href="http://fr2.php.net/manual/fr/class.countable.php"><strong>Countable</strong></a> est la suivante :</p>
<pre class="brush: php;">
interface Countable {
  public function count();
}
</pre>
<p><em>Noter que le système force la valeur de retour en tant qu&#8217;entier</em></p>
<p>Notre classe implémentant l&#8217;interface <strong>Countable</strong> devient :</p>
<pre class="brush: php;">
class myObject implements Countable {
  // code précédent
  public function count() {
    return count( $this-&gt;_data );
  }
}
</pre>
<p><strong>Utilisation</strong> :</p>
<pre class="brush: php;">
$o = new myObject();
echo count( $o ); // Affiche 3
</pre>
<h3>Serializable : linéarisation personnalisée d&#8217;un objet</h3>
<p><strong>Objectif</strong> : personnaliser la linéarisation/délinéarisation d&#8217;un objet.</p>
<p>Par défaut, lorsqu&#8217;on linéarise un objet avec <span class="code">serialize()</span>, toutes les propriétés de cet objet sont traitées. On peut vouloir effectuer un traitement personnalisé lorsqu&#8217;un objet est passé à la fonction <span class="code">serialize()</span> (et donc un traitement personnalisé pour <span class="code">serialize()</span>). C&#8217;est ce que permet de faire l&#8217;interface <a title="L'interface Serializable" href="http://fr2.php.net/manual/fr/class.serializable.php"><strong>Serializable</strong></a> dont la signature est la suivante :</p>
<pre class="brush: php;">
interface Serializable {
  public function serialize ();
  public function unserialize ( $serialized );
}
</pre>
<p>Notre classe implémentant l&#8217;interface <strong>Serializable</strong> devient :</p>
<pre class="brush: php;">
class myObject implements Serializable, Countable {
  // code précédent
  public function serialize() {
    return serialize( $this-&gt;_data );
  }
  public function unserialize( $serialized ) {
    $this-&gt;_data = unserialize( $serialized );
  }
}
</pre>
<p><strong>Utilisation</strong> :</p>
<pre class="brush: php;">
$o = new myObject();
$s = serialize( $o );// retourne C:8:&quot;myObject&quot;:50:{a:3:{i:0;s:2:&quot;un&quot;;i:1;s:4:&quot;deux&quot;;i:2;s:5:&quot;trois&quot;;}}
$o2 = unserialize( $s); // $o2 est un nouvel objet myObject
</pre>
<h3>ArrayAccess : mon objet est un tableau !</h3>
<p><strong>objectif</strong> : accéder à mon objet comme si c&#8217;était un tableau (comme par exemple <span class="code">$o[0]</span>).</p>
<p>la signature de l&#8217;interface <a title="L'interface ArrayAccess" href="http://fr2.php.net/manual/fr/class.arrayaccess.php"><strong>ArrayAccess</strong></a> est la suivante :</p>
<pre class="brush: php;">
interface ArrayAccess {
  public function offsetExists( $offset );
  public function offsetGet( $offset );
  public function offsetSet( $offset, $value );
  public function offsetUnset( $offset );
}
</pre>
<p>Notre classe implémentant l&#8217;interface <strong>ArrayAccess</strong> devient :</p>
<pre class="brush: php;">
class myObject implements ArrayAccess, Serializable, Countable {
  // code précédent
  public function offsetExists( $offset ) {
    return isset( $this-&gt;_data[$offset] );
  }
  public function offsetGet( $offset ) {
    return isset( $this-&gt;_data[$offset] ) ? $this-&gt;_data[$offset] : null;
  }
  public function offsetSet( $offset, $value ) {
    $this-&gt;_data[$offset] = $value;
  }
  public function offsetUnset( $offset ) {
    unset( $this-&gt;_data[$offset] );
  }
}
</pre>
<p><strong>Utilisation</strong> :</p>
<pre class="brush: php;">
$o = new myObject();
var_dump( isset( $o[0] ) ); // true
var_dump( isset( $o['un'] ) ); // false
$o['un'] = 1;
var_dump( isset( $o['un'] ) ); // true
</pre>
<h3>Iterator : itérer un objet</h3>
<p><strong>Objectif</strong> : personnaliser le parcours d&#8217;un objet en utilisant une boucle comme <span class="code">foreach()</span></p>
<p>Par défaut, lorsqu&#8217;on parcours un objet avec <span class="code">foreach()</span>, on itère sur les propriétés publiques de l&#8217;objet. Dans certains cas, on préférera gérer soit même cette itération. C&#8217;est ce que permet de réaliser l&#8217;interface <a title="L'interface Iterator" href="http://fr2.php.net/manual/fr/class.iterator.php"><strong>Iterator</strong></a> dont la signature est la suivante :</p>
<pre class="brush: php;">
Iterator extends Traversable {
  public function current();
  public function key();
  public function next();
  public function rewind();
  public function valid();
}
</pre>
<p>Notre classe implémentant l&#8217;interface <strong>Iterator</strong> devient :</p>
<pre class="brush: php;">
class myObject implements Iterator, ArrayAccess, Serializable, Countable {
  // code précédent
  public function current() {
  	return current( $this-&gt;_data );
  }
  public function key() {
  	return key($this-&gt;_data );
  }
  public function next() {
    return next( $this-&gt;_data );
  }
  public function rewind() {
  	return reset( $this-&gt;_data );
  }
  public function valid() {
  	return (bool)current( $this-&gt;_data );
  }
}
</pre>
<p>Utilisation :</p>
<pre class="brush: php;">
$o = new myObject();
foreach( $o as $key =&gt; $value ) {
	echo &quot;$key =&gt;$value \n&quot;;
}
/* Affiche
 * 0=&gt;un
 * 1=&gt;deux
 * 3=&gt;deux
 */
</pre>
<h2>La classe <span class="code">MyObject</span> terminée</h2>
<p>La classe ainsi créée est la suivante :</p>
<pre class="brush: php;">
class myObject implements Iterator, ArrayAccess, Serializable, Countable {
  protected $_data = array( 'un', 'deux', 'trois');
  public function count() {
    return count( $this-&gt;_data );
  }
  public function serialize() {
    return serialize( $this-&gt;_data );
  }
  public function unserialize( $serialized ) {
    $this-&gt;_data = unserialize( $serialized );
  }
  public function offsetExists ( $offset ) {
    return isset( $this-&gt;_data[$offset] );
  }
  public function offsetGet ( $offset ) {
    return isset( $this-&gt;_data[$offset] ) ? $this-&gt;_data[$offset] : null;
  }
  public function offsetSet ( $offset, $value ) {
    $this-&gt;_data[$offset] = $value;
  }
  public function offsetUnset ( $offset ) {
    unset( $this-&gt;_data[$offset] );
  }
  public function current() {
  	return current( $this-&gt;_data );
  }
  public function key() {
  	return key($this-&gt;_data );
  }
  public function next() {
    return next( $this-&gt;_data );
  }
  public function rewind() {
  	return reset( $this-&gt;_data );
  }
  public function valid() {
  	return (bool)current( $this-&gt;_data );
  }
}
</pre>
<p>Pour être mieux exploitable, la classe devrait posséder quelques méthodes supplémentaires : un constructeur acceptant un paramètre pour initialiser la propriété <span class="code">$_data</span>, un getter et un setter et elle serait pleinement fonctionnelle.</p>
<p>Pour les plus curieux d&#8217;entre-vous, sachez que cette classe et relativement assez proche de la classe <a title="La classe ArrayObject" href="http://fr2.php.net/manual/fr/class.arrayobject.php"><strong>ArrayObject</strong></a> fournie par PHP5. Elle permet en effet d&#8217;utiliser un objet quasiment comme un tableau, ou, d&#8217;un autre point de vue, de <strong>remplacer le fonctionnement procédural des tableaux en fonctionnement objet</strong>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.web-memento.fr/les-interfaces-dans-php5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortie de PHP 5.3</title>
		<link>http://www.web-memento.fr/sortie-de-php-5-3</link>
		<comments>http://www.web-memento.fr/sortie-de-php-5-3#comments</comments>
		<pubDate>Tue, 30 Jun 2009 20:30:27 +0000</pubDate>
		<dc:creator>Luc</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.web-memento.fr/?p=389</guid>
		<description><![CDATA[À croire que Mozilla est PHP ce sont concertés! C&#8217;est en effet ce même 30 juin 2009 que Firefox 3.5 et PHP 5.3 sont présentés en version finale. Comme le fait remarquer Laurentj de jy[B]log, c&#8217;est peut être dû aux numéros de version des 2 logiciels que les éditeurs ont décidé de les publier simultanément, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-104" title="Logo PHP" src="http://www.web-memento.fr/wp-content/uploads/2009/06/logo-php.gif" alt="Logo PHP" width="120" height="67" />À croire que Mozilla est <acronym title="Pre-Hypertext Processing">PHP</acronym> ce sont concertés! C&#8217;est en effet ce même 30 juin 2009 que <a title="Firefox 3.5 dans les bacs !" href="http://www.web-memento.fr/firefox-3-5-dans-les-bacs">Firefox 3.5</a> et <strong><acronym title="Pre-Hypertext Processing">PHP</acronym> 5.3</strong> sont présentés en version finale. Comme le fait remarquer <a title="Sorties majeures aujourd'hui" href="http://ljouanneau.com/blog/post/2009/06/30/Sorties-majeures-aujourd-hui">Laurentj de jy[B]log</a>, c&#8217;est peut être dû aux numéros de version des 2 logiciels que les éditeurs ont décidé de les publier simultanément, qui sait !!</p>
<p>Quoi qu&#8217;il en soit, cette version apporte bon nombre de nouveautés en attendant <acronym title="Pre-Hypertext Processing">PHP</acronym> 6 :</p>
<ul>
<li>support des <strong>espaces de nommages</strong> (<em>namespaces</em>);</li>
<li><strong>résolution statique à la volée</strong> (<em>late static binding</em>);</li>
<li><strong>fonctions anonymes</strong> et <strong>closures</strong>;</li>
<li><strong>Nowdoc</strong>;</li>
<li><strong>modification de l&#8217;opérateur ternaire</strong> : il maintenant possible d&#8217;écrire quelque chose comme <span class="code">expr1 ?: expr3</span>;</li>
<li><strong>goto</strong>;</li>
<li><strong><span class="code">__callStatic()</span></strong>;</li>
<li>nouvelles extensions : <strong>phar</strong>, <strong>intl</strong>, <strong>fileinfo</strong>, <strong>sqlite3</strong>, <strong>enchant</strong>;</li>
<li>correction de plus de <strong>140 bugs.</strong></li>
</ul>
<p>Vous pouvez retrouver <strong>l&#8217;annonce officielle de <acronym title="Pre-Hypertext Processing">PHP</acronym></strong> <a title="PHP 5.3.0 Release Announcement" href="http://php.net/releases/5_3_0.php">ici</a> ainsi que le changeLog <a title="ChangeLog PHP 5.3.0" href="http://www.php.net/ChangeLog-5.php#5.3.0">ici</a>.</p>
<p><acronym title="Pre-Hypertext Processing">PHP</acronym> propose aussi <strong>un guide de migration</strong> de <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.2.x ver <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.3.x <a title="Migration de PHP 5.2.x vers PHP 5.3.x" href="http://fr2.php.net/migration53">ici</a>.</p>
<p><strong>La page de téléchargement</strong> se trouve quant à elle <a title="Téléchargement PHP 5.3" href="http://www.php.net/downloads.php#v5">ici</a>!</p>]]></content:encoded>
			<wfw:commentRss>http://www.web-memento.fr/sortie-de-php-5-3/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.8.4</title>
		<link>http://www.web-memento.fr/zend-framework-1-8-4</link>
		<comments>http://www.web-memento.fr/zend-framework-1-8-4#comments</comments>
		<pubDate>Mon, 29 Jun 2009 19:55:49 +0000</pubDate>
		<dc:creator>Luc</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<guid isPermaLink="false">http://www.web-memento.fr/?p=329</guid>
		<description><![CDATA[Zend a annoncé la sortie de la dernière version de son Framework en version 1.8.4. Cette version corrige plus de 50 bugs sur une vingtaine de composants. Pour en savoir plus sur les nouveautés de cette version, vous pouvez vous rendre sur la page du ChangeLog. Zend en a profité pour annoncer en même temps [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-330" title="Logo Zend Framework" src="http://www.web-memento.fr/wp-content/uploads/2009/06/logo-zend-framework-small.gif" alt="Logo Zend Framework" width="123" height="23" /><strong>Zend</strong> a annoncé la sortie de la dernière version de son <strong>Framework</strong> en version 1.8.4.</p>
<p>Cette version corrige plus de <strong>50 bugs</strong> sur une <strong>vingtaine de composants</strong>. Pour en savoir plus sur les nouveautés de cette version, vous pouvez vous rendre sur la page du <a title="ChangeLog de Zend Framework 1.8.4" href="http://framework.zend.com/changelog/1.8.4">ChangeLog</a>.</p>
<p>Zend en a profité pour annoncer en même temps la mise en ligne d&#8217;une <a title="Feuille de route du Zend Framework" href="http://framework.zend.com/roadmap/">feuille de route</a> pour les versions suivantes du <strong>Zend Framework</strong> permettant aux développeurs d&#8217;avoir une meilleur visibilité sur les nouvelles fonctionnalités qui pourraient être intégrées au Framework au cours des prochaines mise à jour.</p>
<p>On peut ainsi apprendre que la prochaine version majeur du <strong>Zend Framework</strong>, estampillée 1.9.0, devrait être livrée d&#8217;ici la <strong>fin juillet 2009</strong>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.web-memento.fr/zend-framework-1-8-4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction à la POO en PHP5</title>
		<link>http://www.web-memento.fr/introduction-a-la-poo-en-php5</link>
		<comments>http://www.web-memento.fr/introduction-a-la-poo-en-php5#comments</comments>
		<pubDate>Wed, 10 Jun 2009 22:21:53 +0000</pubDate>
		<dc:creator>Luc</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[POO]]></category>
		<guid isPermaLink="false">http://www.web-memento.fr/?p=95</guid>
		<description><![CDATA[PHP dans sa version 5 est sortie le 13 juillet 2004. Basé sur le moteur de script Zend Engine II dont la particularité est d&#8217;offrir un tout nouveau modèle objet complet, tant attendu par de nombreux développeurs. Les nouveautés du modèle objet de PHP5 L&#8217;équipe de développement à voulu placer la programmation objet au sein [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-104 alignleft" title="Logo PHP" src="http://www.web-memento.fr/wp-content/uploads/2009/06/logo-php.gif" alt="Logo PHP" width="120" height="67" /><acronym title="Pre-Hypertext Processing">PHP</acronym> dans sa version 5 est sortie le 13 juillet 2004. Basé sur le moteur de script <strong>Zend Engine II</strong> dont la particularité est d&#8217;offrir un tout nouveau modèle objet complet, tant attendu par de nombreux développeurs.</p>
<h2>Les nouveautés du modèle objet de PHP5</h2>
<p>L&#8217;équipe de développement à voulu placer la programmation objet au sein de PHP5 proche du niveau que propose <strong>C++ ou Java</strong>.  <acronym title="Pre-Hypertext Processing">PHP</acronym> nous offre donc aujourd&#8217;hui un <strong>modèle objet à simple héritage complet</strong>. Les évolutions sont nombreuses :</p>
<ul>
<li><strong>auto-chargement de classe</strong>;</li>
<li>ajout d&#8217;un &laquo;&nbsp;vrai&nbsp;&raquo; <strong>constructeur</strong> et d&#8217;un <strong>destructeur</strong>;</li>
<li><strong>visibilité</strong> des attributs et des méthodes;</li>
<li>accès <strong>statiques</strong> aux attributs et aux méthodes;</li>
<li>définition de <strong>constantes</strong> de classe;</li>
<li><strong>abstraction</strong> de classes;</li>
<li><strong>interface</strong> d&#8217;objets;</li>
<li><strong>surcharge</strong>;</li>
<li><strong>parcours</strong> d&#8217;objets;</li>
<li><strong>clonage</strong> d&#8217;objets;</li>
<li><strong>déférencement</strong> des méthodes;</li>
<li><strong>passage des objets par références</strong> par défaut.</li>
</ul>
<h3>__construct() et __destruct()</h3>
<p>Dans sa version 4, <acronym title="Pre-Hypertext Processing">PHP</acronym> proposait déjà une méthode constructeur (méthode du même nom que la classe) qui a été redéfinie dans la version 5. Cependant, il n&#8217;y avait pas de destructeur. Ces 2 méthodes, <strong>si elles sont définies au sein de la classe</strong>, sont automatiquement appelées lors de l&#8217;instanciation de la classe et lors de la destruction de l&#8217;objet (<em>un objet peut être détruit en utilisant delete() ou unset() et est automatiquement détruit à la fin du script</em>).</p>
<pre class="brush: php;">
&lt;?php
class Bar
{
  public function __construct() {
    echo 'Je né !&lt;br /&gt;';
  }
  public function __destruct() {
    echo 'Je meurt !';
  }
  public function doAnything() {
    echo 'Je vie !&lt;br /&gt;';
  }
}
$obj = new Bar();
$obj-&gt;doAnything();
/**
* Affichera
* Je né !
* Je vie !
* Je meurt !
*/
?&gt;
</pre>
<h3>Visibilité</h3>
<p>En PHP4, tous les attributs et toutes les méthodes étaient <strong>publics</strong> : ils étaient accessibles n&#8217;importe où par n&#8217;importe qui. Dans la version 5, il est possible de contrôler l&#8217;accès aux attributs et aux méthodes plus finement sur <strong>3 niveaux</strong> :</p>
<ul>
<li><strong>public</strong> : accessible à tout le monde;</li>
<li><strong>protected</strong> : uniquement accessible au sein de la classe mère ou d&#8217;une classe fille;</li>
<li><strong>private</strong> : uniquement accessible au sein de la classe mère;</li>
</ul>
<pre class="brush: php;">
&lt;?php
/* classe mère */
class A
{
  public $var1;
  protected $var2;
  private $var3;
  public function fx1(){}
  protected function  fx2(){}
  private function fx3(){}
}
/* classe fille de A */
class B extends A
{
  public $var1;
  protected $var2;
  private $var3; // erreur
  public function fx1(){}
  protected function  fx2(){}
  private function fx3(){} // erreur
}
$objA = new A();
$objA-&gt;var1;
$objA-&gt;var2; // erreur
$objA-&gt;var3; // erreur
?&gt;
</pre>
<h3>Passage par référence et clonage d&#8217;objets</h3>
<p>En PHP4, les objets étaient passés par valeur et non par référence. Il fallait préfixer les objets par &amp; pour utiliser la référence. Aujourd&#8217;hui ce n&#8217;est plus le cas : PHP5 passe les objets par référence <strong>par défaut</strong>.</p>
<pre class="brush: php;">
$src-&gt;value = 'foo';
$copy = $src;
$copy-&gt;value = 'bar';
echo $src-&gt;value; // Affiche foo en PHP4 et bar en PHP5
</pre>
<p>En utilisant le mot clé <strong>clone</strong>, on force la copie explicite de l&#8217;objet et de ses valeurs.</p>
<pre class="brush: php;">
$src-&gt;value = 'foo';
$copy = clone $src;
$copy-&gt;value = 'bar';
echo $src-&gt;value; // Affiche foo
</pre>
<h3>Déférencement</h3>
<p>En PHP4, si une méthode renvoyait un objet, on ne pouvait pas l&#8217;utiliser directement. Il fallait obligatoirement l&#8217;enregistrer dans une variable avant de pouvoir s&#8217;en servir. PHP5 permet d&#8217;utiliser directement la valeur de retour.</p>
<pre class="brush: php;">
// PHP4
$objB = $objA-&gt;getObjB();
$objB-&gt;doAnything();
// PHP5
$objA-&gt;getObjB()-&gt;doAnything();
</pre>
<p>C&#8217;est une fonctionnalité qui est aujourd&#8217;hui utilisée dans de nombreux frameworks <acronym title="Pre-Hypertext Processing">PHP</acronym>, notament le Zend Framework, et qui permet de <strong>chainer les actions</strong>. Le codes est ainsi allégé, plus facile à lire et c&#8217;est surtout un avantage considérable pour le développeur.</p>
<p>Il n&#8217;est évidemment pas possible de détailler toutes les nouveautés du modèle objet de PHP5 en un seul article. J&#8217;ai choisi celles qui me semblaient être les plus importantes, tant au niveau de l&#8217;amélioration qu&#8217;elles apportent qu&#8217;en utilité. J&#8217;aurai bien sûr l&#8217;occasion de parler des autres évolutions de PHP5 dans différents articles à venir.</p>]]></content:encoded>
			<wfw:commentRss>http://www.web-memento.fr/introduction-a-la-poo-en-php5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
