<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://methylbro.titaxium.org/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>Méthylbro Développeur Web PHP - Tag - objet</title>
  <link>http://methylbro.titaxium.org/</link>
  <atom:link href="http://methylbro.titaxium.org/feed/tag/objet/rss2" rel="self" type="application/rss+xml"/>
  <description>Développeur Web PHP</description>
  <language>fr</language>
  <pubDate>Wed, 08 Sep 2010 20:21:12 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>PHP : Les références</title>
    <link>http://methylbro.titaxium.org/post/2009/09/15/php-les-references</link>
    <guid isPermaLink="false">urn:md5:5323823f19c4fea927cd1463021d9552</guid>
    <pubDate>Tue, 15 Sep 2009 08:00:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Développement</category>
        <category>garbage collector</category><category>objet</category><category>php</category><category>POO</category><category>référence</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/php.png&quot; alt=&quot;PHP : Les références&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;Lors d'un de mes derniers billets sur la comparaison d'objets avec &lt;strong&gt;PHP&lt;/strong&gt;, j'ai évoqué un concept qui avec du recul m'a semblé nécessaire d'approfondir : &lt;strong&gt;les références&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Comme il s'avère que je suis bien partit dans une petite série de billets dédié à des concepts simple ; je pense qu'il est opportun de s'attarder sur le sujet.&lt;/p&gt;    &lt;h3&gt;Définition d'une référence&lt;/h3&gt;
&lt;p&gt;En &lt;strong&gt;PHP&lt;/strong&gt; une référence est une autre façon d'accéder à une valeur stockée en mémoire. Ainsi, au lieu d'avoir une variable &lt;em&gt;x&lt;/em&gt; qui contient une valeur &lt;em&gt;y&lt;/em&gt;, nous avons une variable &lt;em&gt;x&lt;/em&gt; qui contient une référence vers la valeur &lt;em&gt;y&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;La documentation officielle de &lt;strong&gt;PHP&lt;/strong&gt; compare les &lt;strong&gt;références&lt;/strong&gt; avec les liens symboliques que l'on trouve sur les systèmes UNIX, l'analogie est intéressante. &lt;/p&gt;
&lt;p&gt;Ainsi donc, si &lt;em&gt;$A&lt;/em&gt; est une référence de la valeur &lt;em&gt;$B&lt;/em&gt; alors &lt;em&gt;$A&lt;/em&gt; et &lt;em&gt;$B&lt;/em&gt; sont des variables qui pointent vers le même contenu.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/charts/.b-reference-sur-a_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;En &lt;strong&gt;PHP&lt;/strong&gt; lorsque l'on souhaite passer des arguments par &lt;strong&gt;référence&lt;/strong&gt;, nous utiliserons le caractère &lt;em&gt;&amp;amp;&lt;/em&gt;. Soit pour dire « A est une référence vers la valeur de B » :&lt;/p&gt;
&lt;code&gt;$A =&amp;amp; $B;&lt;/code&gt;
&lt;p&gt;Attention, si vous provenez du monde du C, ne confondez pas les références en &lt;strong&gt;PHP&lt;/strong&gt; et les pointeurs que vous pourrez trouver en C. Il s'agit juste ici de pouvoir appeler une valeur identique avec des noms différents. &lt;/p&gt;
&lt;p&gt;Une référence s'utilise ensuite comme n'importe quelle variable. Vous pouvez par exemple utilisez la fonction &lt;em&gt;unset($ref)&lt;/em&gt; pour détruire votre &lt;strong&gt;référence&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Néanmoins, même s'il est très facile de détruire une &lt;strong&gt;référence&lt;/strong&gt;, il deviendra plus complexe de supprimer la valeur stockée en mémoire. C'est pourquoi, la manipulation des références est un des points critique concernant la consommation en ressources mémoire d'un script. &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/charts/.b-reference-sur-a-2_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Si l'on reprend notre exemple et que l'on supprime la variable originale &lt;em&gt;$B&lt;/em&gt;. La valeur stockée derrière celle-ci sera toujours conservée en mémoire car il restera encore la référence &lt;em&gt;$A&lt;/em&gt; liée.&lt;/p&gt;
&lt;p&gt;Si vous ne prenez pas garde à faire un minimum le ménage dans vos scripts vous pouvez alors rapidement vous retrouver avec beaucoup de valeurs inutiles stockées en mémoire.&lt;/p&gt;
&lt;p&gt;Le problème de la gestion de la mémoire est traité plus largement par ce que l'on appelle le &lt;strong&gt;Garbage Collector&lt;/strong&gt; (le ramasse-miettes en français). Il sera intéressant de revenir sur le GC de &lt;strong&gt;PHP&lt;/strong&gt; plus tard dans un autre article.&lt;/p&gt;
&lt;h3&gt;Passage de paramètres par référence&lt;/h3&gt;
&lt;p&gt;Malgré les ennuis que nous venons de voir, les références apportent de tout même plus de solutions que de problèmes. L'un des usages les plus courant et les plus agréable de ce concept est le passage d'arguments par référence. &lt;/p&gt;
&lt;p&gt;En effet, il est très fréquent lors de développement d'application de vouloir modifier la valeur même d'un argument au sein d'une fonction. Un peu comme si ce paramètre était défini comme une variable globale. &lt;/p&gt;
&lt;p&gt;Pour être plus clair, prenons par exemple les fonctions PHP de tri sur les tableaux comme &lt;em&gt;usort&lt;/em&gt;, &lt;em&gt;uksort&lt;/em&gt; ou autre. Le tableau que vous passez en paramètre est directement modifié et la fonction ne retourne qu'un booléen. &lt;/p&gt;
&lt;p&gt;Prenons par exemple une fonction qui ajoute un retour de chariot à la fin d'une chaîne de caractères, avec la chaîne de caractères étant un paramètre par référence :&lt;/p&gt;
&lt;code&gt;function addCRLF(&amp;amp;$string) {&lt;br /&gt;
$string.&quot;\r\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$machaine = 'Hello World !';&lt;br /&gt;
addCRLF($machaine);&lt;br /&gt;
echo $machaine;&lt;/code&gt;
&lt;h3&gt;Retourner des références&lt;/h3&gt;
&lt;p&gt;Dans un deuxième cas, il peut être intéressant de récupérer une référence plutôt qu'une valeur après l'exécution d'une fonction. Il ne faudra alors pas oublier de spécifier lors de la définition de la fonction que celle-ci retournera une référence.&lt;/p&gt;
&lt;p&gt;Voyons un exemple dans un style un peu plus « Orienté Objet » :&lt;/p&gt;
&lt;code&gt;class stdObject {&lt;br /&gt;
public $attribute = 1;&lt;br /&gt;
function &amp;amp; method() {&lt;br /&gt;
return $this-&amp;gt;attribute;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$object = new stdObject;&lt;br /&gt;
$myRef = &amp;amp;$object-&amp;gt;method();&lt;br /&gt;
$myRef = 'Hello World';&lt;br /&gt;
echo $object-&amp;gt;attribute;&lt;/code&gt;
&lt;p&gt;Dans cet exemple, &lt;em&gt;$myRef&lt;/em&gt; devient un référence vers la même valeur que &lt;em&gt;$object-&amp;gt;attribute&lt;/em&gt;. &lt;/p&gt;</description>
    
    
    
          <comments>http://methylbro.titaxium.org/post/2009/09/15/php-les-references#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/09/15/php-les-references#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/377</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP : Appels de méthode à la chaîne</title>
    <link>http://methylbro.titaxium.org/post/2009/09/13/php-appels-de-methode-a-la-chaine</link>
    <guid isPermaLink="false">urn:md5:a83cb8e72c9be78252595994b9969895</guid>
    <pubDate>Sun, 13 Sep 2009 08:00:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Développement</category>
        <category>méthode</category><category>objet</category><category>php</category><category>POO</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/php.png&quot; alt=&quot;PHP : Des appels de méthode à la chaîne&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;Il y a plein de bonne pratique que je vois trop souvent être ignorées par d'autres développeurs qui m'entourent (collègues, stagiaires etc). Pour certaines d'entre elles, il s'agit de pratique que j'ai ignoré pendant trop longtemps par méconnaissance d'un l'intérêt qu'elles peuvent apporter.&lt;/p&gt;
&lt;p&gt;J'imagine qu'il m'en reste encore énormément à découvrir d'ailleurs. L'idée ici est de factoriser un ensemble d'appels de &lt;strong&gt;méthode&lt;/strong&gt; sur un &lt;strong&gt;objet&lt;/strong&gt; en une seule instruction. Pouvoir faire des appels de &lt;strong&gt;méthodes&lt;/strong&gt; à la chaîne.&lt;/p&gt;    &lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/.chaine_s.jpg&quot; alt=&quot;PHP : Appels de méthode à la chaîne&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Il est fréquent de tomber sur des cas semblables à l'exemple suivant : &lt;/p&gt;
&lt;code&gt;class Object {&lt;br /&gt;
function methodA() {}&lt;br /&gt;
function methodB() {}&lt;br /&gt;
function methodC() {}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$instance = new Object();&lt;br /&gt;
$instance-&amp;gt;methodA();&lt;br /&gt;
$instance-&amp;gt;methodB();&lt;br /&gt;
$instance-&amp;gt;methodC();&lt;/code&gt;
&lt;p&gt;En considérant que les méthodes A, B et C soit de type &lt;em&gt;void&lt;/em&gt;. C'est-à-dire qu'elle ne retournent rien et qu'elle n'auront pas à l'avenir pour vocation de retourner une information. Il serait intéressant alors de factoriser les trois instructions utilisées pour l'appel a ces trois &lt;strong&gt;méthodes&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Pour ce faire, il suffit lors de la déclaration des &lt;strong&gt;méthodes&lt;/strong&gt;, de ajouter l'information suivante : &lt;/p&gt;
&lt;code&gt;class Object {&lt;br /&gt;
function methodA() {&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
function methodB() {&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
function methodC() {&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
}&lt;/code&gt;
&lt;p&gt;L'intérêt est de pouvoir utiliser plus simplement cette classe et de faire appel aux &lt;strong&gt;méthodes&lt;/strong&gt; A, B et C en une seule instruction : &lt;/p&gt;
&lt;code&gt;$instance = new Object();&lt;br /&gt;
$instance-&amp;gt;methodA()-&amp;gt;methodB()-&amp;gt;methodC();&lt;/code&gt;
&lt;p&gt;Plus intéressant n'est-ce pas ?&lt;/p&gt;</description>
    
    
    
          <comments>http://methylbro.titaxium.org/post/2009/09/13/php-appels-de-methode-a-la-chaine#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/09/13/php-appels-de-methode-a-la-chaine#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/376</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP : La comparaison d'objets</title>
    <link>http://methylbro.titaxium.org/post/2009/09/07/php-comparaison-des-objets</link>
    <guid isPermaLink="false">urn:md5:5cd9dadbfbc07d6b0ca6372135d38d8d</guid>
    <pubDate>Mon, 07 Sep 2009 08:00:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Développement</category>
        <category>comparaison</category><category>objet</category><category>opérateur</category><category>php</category><category>POO</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/php.png&quot; alt=&quot;&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;En PHP ; la &lt;strong&gt;comparaison d'objet&lt;/strong&gt; est très simple, mais elle suppose une légère nuance entre le moteur objet de &lt;strong&gt;PHP4&lt;/strong&gt; et celui de &lt;strong&gt;PHP5&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;C'est cet aspect de &lt;a href=&quot;http://methylbro.titaxium.org/tag/php&quot;&gt;PHP&lt;/a&gt; que nous allons voir aujourd'hui.&lt;/p&gt;    &lt;p&gt;Comme &lt;strong&gt;PHP&lt;/strong&gt; n'intègre pas (encore) de méthode pour effectuer une surcharge d'opérateur comme cela peut être le cas dans d'autres langages. Nous allons nous concentrer uniquement sur la comparaison d'objets via les opérateurs d'égalité et d'identité (==, ===, !=, !==). &lt;/p&gt;
&lt;p&gt;Pour nos exemples, nous utiliserons la petite classe suivante : &lt;/p&gt;
&lt;code&gt;class stdObject  {&lt;br /&gt;
protected $x,$y;&lt;br /&gt;
public function __construct($x, $y)  {&lt;br /&gt;
$this-&amp;gt;x = $x;&lt;br /&gt;
$this-&amp;gt;y = $y;&lt;br /&gt;
}&lt;br /&gt;
}&lt;/code&gt;
&lt;h3&gt;Comparaison d'objets en PHP4&lt;/h3&gt;
&lt;p&gt;Pour commencer, en &lt;strong&gt;PHP4&lt;/strong&gt; la comparaison d'objet est simpliste. Deux objets sont considérés comme égaux s'ils sont tous deux l'instance d'une même classe avec des valeurs égales pour chaque propriétés. &lt;/p&gt;
&lt;p&gt;Soit par l'exemple suivant (en PHP4) : &lt;/p&gt;
&lt;code&gt;$A = new stdObject(1,1.5);&lt;br /&gt;
$B = new stdObject(1,1.5);&lt;br /&gt;
&lt;br /&gt;
$A == $B : TRUE&lt;br /&gt;
$A != $B : FALSE&lt;br /&gt;
$A === $B : TRUE&lt;br /&gt;
$A !== $B : FALSE&lt;br /&gt;
&lt;br /&gt;
$C = new stdObject(1,1.5);&lt;br /&gt;
$D = new stdObject(1,1);&lt;br /&gt;
&lt;br /&gt;
$C == $D : FALSE&lt;br /&gt;
$C != $D : TRUE&lt;br /&gt;
$C === $D : FALSE&lt;br /&gt;
$C !== $D : TRUE
&lt;/code&gt;
&lt;h3&gt;Comparaison d'objets en PHP5&lt;/h3&gt;
&lt;p&gt;Cependant, dans notre premier exemple les objets $A et $B, même s'ils sont égaux ne sont pas identiques. &lt;strong&gt;PHP5&lt;/strong&gt; va donc se compliquer un peu plus la comparaison d'objets en dissociant l'opérateur d'égalité (==) avec celui d'identité (===). &lt;/p&gt;
&lt;p&gt;En PHP5, deux objets pourront être alors égaux mais pas forcément identiques. C'est-à-dire que deux objets peuvent être deux instances d'une même classe avec des valeurs égales pour chacune de leurs propriétés sans toutefois faire référence à une instance identique. &lt;/p&gt;
&lt;p&gt;Soit l'exemple suivant (en PHP5) :&lt;/p&gt;
&lt;code&gt;$C = new stdObject(1,1.5);&lt;br /&gt;
$D = new stdObject(1,1.5);&lt;br /&gt;
&lt;br /&gt;
$C == $D : TRUE&lt;br /&gt;
$C != $D : FALSE&lt;br /&gt;
$C === $D : FALSE&lt;br /&gt;
$C !== $D : TRUE&lt;br /&gt;
&lt;br /&gt;
$E = $D;&lt;br /&gt;
&lt;br /&gt;
$E == $D : TRUE&lt;br /&gt;
$E != $D : FALSE&lt;br /&gt;
$E === $D : TRUE&lt;br /&gt;
$E!== $D : FALSE&lt;/code&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Nous venons donc de voir la différence subtile entre PHP4 et PHP5 lors de la comparaison d'objets. En POO, et particulièrement en PHP, comprendre les mécanismes liés au stockage en mémoire de vos objets (références, garbage collector etc) est indispensable.&lt;/p&gt;</description>
    
    
    
          <comments>http://methylbro.titaxium.org/post/2009/09/07/php-comparaison-des-objets#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/09/07/php-comparaison-des-objets#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/374</wfw:commentRss>
      </item>
    
  <item>
    <title>Conception et programmation orienté objet</title>
    <link>http://methylbro.titaxium.org/post/2009/09/03/conception-et-programmation-oriente-objet</link>
    <guid isPermaLink="false">urn:md5:510b1825ca05c85570527d61301bbe7d</guid>
    <pubDate>Thu, 03 Sep 2009 08:00:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Lectures</category>
        <category>livre</category><category>objet</category><category>POO</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/livres/.2212122705.08.LZZZZZZZ_t.jpg&quot; alt=&quot;&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;Voici un livre impressionnant sous tous les rapports. D'abord par sa taille, il s'agit d'un pavé énorme, près de 1500 pages. Ensuite par son exhaustivité car il aborde tour à tour tous les concepts inhérents au paradigme objet (modularité, généricité, typage, assertions et exceptions etc …). &lt;/p&gt;
&lt;p&gt;Le tout illustré par des exemples éloquents et compréhensibles par tous les développeurs. Qu'ils proviennent du monde du C, du Java ou dans mon cas du PHP (qui est loin d'être un modèle de langage à suivre pour l'application de certains concepts naturels de la Programmation Orienté Objet. &lt;/p&gt;
&lt;p&gt;Ce livre est une bonne étape non seulement pour ceux qui veulent apprendre et/ou comprendre la POO mais également pour ceux qui - comme moi - souhaite approfondir le sujet pour pallier à certaines lacunes. Je suis même sur que les développeurs orienté objet les plus chevronné d'entre nous y trouverons tout de même foule d'enseignements. &lt;/p&gt;
&lt;p&gt;Ce fut mon livre de chevet pendant ces dernières semaines. Je vous le conseille allègrement malgré son prix un peu élevé (60 € sur le site de l'éditeur). Cela reste néanmoins un bon investissement. &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.editions-organisation.com/Livre/9782212122701/conception-et-programmation-orientees-objet&quot; target=&quot;_blank&quot;&gt;Conception et programmation orienté objet de Bertrand Meyer&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://methylbro.titaxium.org/post/2009/09/03/conception-et-programmation-oriente-objet#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/09/03/conception-et-programmation-oriente-objet#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/372</wfw:commentRss>
      </item>
    
  <item>
    <title>Introduction à la POO avec PHP - Partie 2</title>
    <link>http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP-Partie-2</link>
    <guid isPermaLink="false">urn:md5:ffcadccb82724c37cdf2e3150dac6b61</guid>
    <pubDate>Tue, 15 Apr 2008 06:30:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Tutoriels</category>
        <category>$this</category><category>class</category><category>classe</category><category>fonction</category><category>méthode</category><category>objet</category><category>php</category><category>POO</category><category>propriété</category>    
    <description>&lt;blockquote&gt;
&lt;p&gt;La programmation orientée objet (POO) ou programmation par objet, est un paradigme de programmation informatique qui consiste en la définition et l'assemblage de briques logicielles appelées objet ; un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet&quot; target=&quot;_blank&quot;&gt;http://fr.wikipedia.org/wiki/Programmation_orientée_objet&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ou bien d'un simple stylo !&lt;br /&gt;Comme promis&amp;nbsp;(&lt;a href=&quot;http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP/&quot; hreflang=&quot;fr&quot;&gt;Introduction à la POO avec PHP - Partie 1&lt;/a&gt;) ; voici la deuxième partie de cette série de billets dédiés à la Programmation Orienté Objet avec PHP. &lt;/p&gt;    &lt;h1&gt;Les concepts généraux de la POO&lt;/h1&gt;
&lt;h2&gt;Classe et instance de classe&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Comme vous pouvez l’imaginer ; avant de pouvoir utiliser un objet ; nous allons devoir définir le type de cet objet.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;C’est à ce niveau que la compréhension risque d’être la moins évidente et la plus difficile. Il va falloir distinguer le &lt;strong&gt;type&lt;/strong&gt; d’un objet (entier, réel, booléen etc) de l’objet lui-même (33, 3.14, true etc).&lt;/p&gt;
&lt;p&gt;Lorsque nous définirons le type d’un objet ; nous parlerons de &lt;strong&gt;&lt;ins&gt;classes&lt;/ins&gt;&lt;/strong&gt;. Lorsque nous utiliserons ses classes pour créer et manipuler des objets nous parlerons d’&lt;strong&gt;&lt;ins&gt;instances de classes&lt;/ins&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour illustrer ; je vais reprendre mon exemple des stylos. La classe sera le schéma pour un stylo. Comme un de plan de fabrication, ou d’utilisation. Tandis que l’instance de cette classe sera techniquement le stylo. Donc ; pour le même schéma ; pour la même classe ; vous pouvez avoir plusieurs stylos ; plusieurs &lt;strong&gt;objets&lt;/strong&gt; ou &lt;strong&gt;instances de classe&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;En php définir une classe est aussi simple que de définir une fonction :&lt;/p&gt;
&lt;code&gt;
&lt;p&gt;class Stylo {&lt;br /&gt;&amp;nbsp; // définition des propriétés&lt;br /&gt;&amp;nbsp; // définition des méthodes&lt;br /&gt;}&lt;/p&gt;
&lt;/code&gt;
&lt;p&gt;Une fois la classe définie ; vous pouvez très bien créer un nouvel objet ; une nouvelle instance de votre classe. Pour ce faire ; en php on utilise l’opérateur new.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// $myClassInstance est un nouvel objet de type Stylo&lt;br /&gt;$myClassInstance = new Stylo() ;&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Les propriétés&lt;/h2&gt;
&lt;p&gt;Les &lt;strong&gt;propriétés&lt;/strong&gt; sont des variables associés aux &lt;strong&gt;instances&lt;/strong&gt; de vos classes (ceci est une généralité. Nous verrons plus loin que des cas spécifiques sont possibles ; notamment avec le mot clé &lt;em&gt;static&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Par exemple ; si nous considérons une entité de type Personne. Chaque personnes possède un nom ; un prénom et une date de naissance. Et bien ces informations seront des propriétés de la classe Personne. Chaque instance de Personne possédera donc un nom ; un prénom et une date de naissance.&lt;/p&gt;
&lt;p&gt;Si je reprends mon exemple du stylo ; chaque stylo aura comme propriété un niveau d’encre ; une couleur ; et un statut pour savoir si ma mine est sortie ou capuchée. La définition de ma classe Stylo prendra donc la forme suivante :&lt;/p&gt;
&lt;code&gt;
&lt;p&gt;class Stylo {&lt;br /&gt;&amp;nbsp; var $niveau_encre ;&lt;br /&gt;&amp;nbsp; var $couleur ;&lt;br /&gt;&amp;nbsp; var $statut ;&lt;br /&gt;&amp;nbsp; // définition des méthodes&lt;br /&gt;}&lt;/p&gt;
&lt;/code&gt;
&lt;p&gt;Le mot clés var n’est plus utilisé depuis php5. Cependant il a été conservé pour une compatibilité avec php4. Il est utilisé ici ; juste pour que vous sachiez qu’il existe et pour que vous ne soyez pas surpris si un jour vous le rencontrez.&lt;/p&gt;
&lt;h2&gt;Les méthodes&lt;/h2&gt;
&lt;p&gt;Les &lt;strong&gt;méthodes&lt;/strong&gt; sont des procédures et/ou des fonctions associées aux &lt;strong&gt;instances&lt;/strong&gt; de vos classes. De la même façon que les &lt;strong&gt;propriétés&lt;/strong&gt; ; nous verrons plus loin que cette affirmation est une généralité assujettie à des exceptions.&lt;/p&gt;
&lt;p&gt;Au sein de vos méthodes ; vous pouvez faire appel aux autres éléments (méthodes et ou propriétés) de votre instance de classe à l’aide de l’objet &lt;strong&gt;&lt;ins&gt;$this&lt;/ins&gt;&lt;/strong&gt;. Qui est en fait une référence vers l’instance de classe concernée. &lt;/p&gt;
&lt;p&gt;Par exemple ; nous allons créer une &lt;strong&gt;méthode&lt;/strong&gt; qui renvoie vrai si le niveau d’encre est suffisant pour écrire ; et faux le cas contraire. Vous allez voir que ; a part la possibilité d’accéder aux propriétés de l’objet en cours ; rien ne change comparativement aux fonctions que vous connaissez.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;class Stylo {&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $niveau_encre ;&lt;br /&gt;&amp;nbsp; $couleur ;&lt;br /&gt;&amp;nbsp; $statut ;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; function peutEcrire() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($this-&amp;gt;niveau_encre&amp;lt;=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $result = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $result =&amp;nbsp;true ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $result ;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP-Partie-3&quot; hreflang=&quot;fr&quot;&gt;Lire la suite&lt;/a&gt;...&lt;/p&gt;</description>
    
    
    
          <comments>http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP-Partie-2#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP-Partie-2#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/55</wfw:commentRss>
      </item>
    
  <item>
    <title>Introduction à la POO avec PHP</title>
    <link>http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP</link>
    <guid isPermaLink="false">urn:md5:c5eea17b8ef7cdef0c633ac759287cde</guid>
    <pubDate>Mon, 14 Apr 2008 06:00:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Tutoriels</category>
        <category>class</category><category>classe</category><category>fonction</category><category>objet</category><category>php</category><category>POO</category><category>procédure</category><category>stylo</category>    
    <description>&lt;p&gt;Depuis sa version 4 ; PHP intègre les concepts de &lt;strong&gt;Programmation Orienté Objet&lt;/strong&gt;. Très à la mode ; cette façon de programmer vous sera très utile. Néanmoins ; elle introduit foule de nouveaux concepts à nos méthodes de développement plus classique.&lt;/p&gt;
&lt;p&gt;Il existe beaucoup d’articles et de tutoriel concernant la POO. Mais dans la plupart des cas ; ces articles sont écrits avec des exemples en C++ ou en Java. &lt;br /&gt;Et encore trop peu avec des illustrations en PHP.&lt;/p&gt;
&lt;p&gt;Cette semaine ; à l’occasion de la&amp;nbsp;&lt;a href=&quot;http://www.titaxium.com/post/2008/04/13/Resurrection&quot; hreflang=&quot;fr&quot;&gt;sortie de la version 5&lt;/a&gt; de &lt;a href=&quot;http://www.titaxium.com/&quot; hreflang=&quot;fr&quot;&gt;TitaXium&amp;nbsp;&lt;/a&gt;; je vous propose une série de 6 articles introduisant la &lt;strong&gt;Programmation Orienté Objet&lt;/strong&gt; avec des exemples en PHP.&lt;/p&gt;
&lt;p&gt;Ainsi&amp;nbsp;; en 6 jours&amp;nbsp;; j’espère faire découvrir à ce qui ne le connaissent pas encore&amp;nbsp;; le monde des &lt;strong&gt;classes&lt;/strong&gt;&amp;nbsp;; des &lt;strong&gt;méthodes&lt;/strong&gt; et des &lt;strong&gt;objets&lt;/strong&gt;. Et d’ici à ce week-end&amp;nbsp;; vous serez sans doutes à même d’écrire vous-même vos propres classes&amp;nbsp;!&lt;/p&gt;    &lt;h1&gt;Introduction&lt;/h1&gt;
&lt;h2&gt;Prés requis&lt;/h2&gt;
&lt;p&gt;Avant d’entrer dans le vif du sujet ; je déconseille cet article à toutes les personnes ayant un niveau de débutant en développement.&lt;/p&gt;
&lt;p&gt;Cet article s’adresse à des développeurs PHP confirmés ; qui ont de l’expérience. Pour comprendre cet article ; il vous faudra être à l’aise avec tous les outils utilisés dans les langages procéduraux ; et plus particulièrement en PHP.&lt;/p&gt;
&lt;p&gt;De plus ; cet article n’est qu’une introduction. Une première étape dans la compréhension de la POO.&lt;/p&gt;
&lt;p&gt;Nous ne traiterons donc pas de concepts avancés comme par exemple l’héritage ou les design pattern.&lt;/p&gt;
&lt;h2&gt;Comparaison avec un développement procédural&lt;/h2&gt;
&lt;p&gt;En développement classique ; vous connaissez déjà les &lt;strong&gt;types de variable&lt;/strong&gt; les plus courant. Entiers, réels, Tableaux, Chaines de caractères, booléen … Tout ca n’a plus de secrets pour vous.&lt;/p&gt;
&lt;p&gt;Vous avez aussi l’habitude de réunir vos traitements récurrents au sein de &lt;strong&gt;procédures&lt;/strong&gt; ou de &lt;strong&gt;fonctions&lt;/strong&gt;. C’est ce que nous faisons tous avec nos db_connect() ou encore les afficher_machin($truc).&lt;/p&gt;
&lt;p&gt;Pourtant ; la &lt;strong&gt;POO&lt;/strong&gt; (&lt;em&gt;Programmation Orienté Objet&lt;/em&gt;) est un terme qui vous parait obscur et barbare. Vous en entendez parler depuis des années sans trop savoir ce qui se cache derrière. &lt;/p&gt;
&lt;p&gt;Imaginez un instant ; qu’en plus des types courant que nous avons cité ci-dessus ; vous puissiez vous même définir vos propres &lt;strong&gt;types&lt;/strong&gt; de valeurs. Avec des comportements et des &lt;strong&gt;structures&lt;/strong&gt; qui leur sont propre. Imaginez vos variables comme des &lt;strong&gt;entités&lt;/strong&gt; ; des individus contenant des informations et pouvant effectuer des traitements divers sur celles-ci.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Vous ne voyez toujours pas ou je veux en venir ?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Si on prend une variable &lt;strong&gt;simple&lt;/strong&gt; ; un entier par exemple ; cette variable peut contenir une &lt;strong&gt;valeur&lt;/strong&gt;. Et sur cette valeur je peux effectuer des &lt;strong&gt;traitements&lt;/strong&gt; (l’additionner ; la comparer ; la diviser etc). En théorie objet ; toutes ces &lt;strong&gt;entités&lt;/strong&gt; que nous utilisons ; nous appelons cela des &lt;strong&gt;&lt;ins&gt;objets&lt;/ins&gt;&lt;/strong&gt; (ou des &lt;strong&gt;&lt;ins&gt;instances de classe&lt;/ins&gt;&lt;/strong&gt;). Et ces traitements ce sont des &lt;strong&gt;&lt;ins&gt;méthodes&lt;/ins&gt;&lt;/strong&gt;. Mon entier sera donc un objet ; sur lequel je pourrais appliquer les méthodes d’addition ; de comparaison ; de division etc.&lt;/p&gt;
&lt;p&gt;En plus des objets simple que nous connaissons en développement procédural classique ; nous pouvons donc définir de nouveaux objets. Avec de nouvelles &lt;strong&gt;méthodes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Vous verrez que ce concept d’objets et plus &lt;strong&gt;naturel&lt;/strong&gt; qu’il n’y parait de prime abord. Car tout ce qui nous entoure n’est qu’objets ! Le clavier et la souris que vous avez sous votre nez sont des objets. &lt;br /&gt;Qui contiennent des valeurs et sur lequel vous appliquez des méthodes.&lt;/p&gt;
&lt;p&gt;Par exemple ; votre souris est un objet. Qui contient les valeurs x et y (pour connaitre sa position) et sur lequel vous pouvez appliquer les méthodes deplacer(), click_droit(), click_gauche() …&lt;/p&gt;
&lt;h2&gt;Exemple employé&lt;/h2&gt;
&lt;p&gt;Pour illustrer mon propos ; je vais utiliser un exemple très simple. Et très commun.&lt;/p&gt;
&lt;p&gt;Prenez un stylo. Un de ces stylos à bille commerciaux que l’on trouve n’importe où. Il s’agit bien d’un objet. Un objet que vous pouvez facilement synthétiser le fonctionnement en POO.&lt;/p&gt;
&lt;p&gt;Que peut-on faire avec un stylo ou, quelles seront les &lt;strong&gt;méthodes&lt;/strong&gt; de notre objet ? Exactement ce que vous faites avec un stylo traditionnel. Ecrire, cliquer sur ses fesses pour faire apparaitre ou disparaitre la mine ; ou encore observer le niveau de sa réserve d’encre. Et bien ce sera très exactement les méthodes que nous allons retrouver dans notre objet.&lt;/p&gt;
&lt;p&gt;Quelles sont les &lt;strong&gt;propriétés&lt;/strong&gt; que possèdes un stylo ? Quels sont les &lt;strong&gt;attributs&lt;/strong&gt; qui font de lui qu’il est différent d’un autre stylo ? Quelles valeurs vont être contenues notre stylo ? Ici nous nous posons la question des valeurs qui seront attachés à chacun de nos stylos.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP-Partie-2&quot; hreflang=&quot;fr&quot;&gt;Lire la suite&lt;/a&gt;...&lt;/p&gt;</description>
    
    
    
          <comments>http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/49</wfw:commentRss>
      </item>
    
</channel>
</rss>