cvs: phpdoc /fr/language oop.xml

From: Date: Fri, 20 Jul 2001 07:10:14 +0000
Subject: cvs: phpdoc /fr/language oop.xml
Groups: php.doc 
Request: Send a blank email to phpdoc+get-969336333@lists.php.net to get a copy of this message
dams Fri Jul 20 03:10:14 2001 EDT Modified files: /phpdoc/fr/language oop.xml Log: do_foo -> faire_foo

Index: phpdoc/fr/language/oop.xml diff -u phpdoc/fr/language/oop.xml:1.11 phpdoc/fr/language/oop.xml:1.12 --- phpdoc/fr/language/oop.xml:1.11 Mon Mar 19 12:06:31 2001 +++ phpdoc/fr/language/oop.xml Fri Jul 20 03:10:14 2001 @@ -1,5 +1,5 @@ <chapter id="language.oop"> - <title>Classes et objets</title> + <title>Les classes et les objets</title> <sect1 id="keyword.class"> <title>Les classes : <literal>class</literal></title> <para> @@ -34,6 +34,29 @@ tableau associatif contenant les articles du panier et de deux fonctions, une pour ajouter et une pour enlever des &eacute;l&eacute;ments au panier. </para> + <caution> + <simpara> + Les notes suivantes ne sont valable que pour PHP 4. + </simpara> + <simpara> + Le nom <literal>stdClass</literal> est utilis&eacute; en interne par + Zend et ne doit pas &ecirc;tre utilis&eacute;. Vous ne pouvez pas nommer une + classe <literal>stdClass</literal> en PHP. + </simpara> + <simpara> + Les noms de fonctions <literal>__sleep</literal> et + <literal>__wakeup</literal> sont magiques en PHP. Vous ne pouvez + pas utiliser ces noms de fonctions dans vos classes, &agrave; moins + que vous ne souhaitiez utiliser la magie qui y est associ&eacute;e. + </simpara> + <simpara> + PHP se r&eacute;serve l'usage de tous les noms de fonctions commen&ccedil;ants par + <literal>__</literal>, pour sa propre magie. Il est vivement + recommand&eacute; de ne pas utilser des noms de fonctions commen&ccedil;ants par + <literal>__</literal>, &agrave; moins que vous ne souhaitiez utiliser + la magie qui y est associ&eacute;e. + </simpara> + </caution> <note> <simpara> En PHP 4, seuls les initialiseurs constants pour les variables @@ -49,19 +72,21 @@ var $date_du_jour = date("d/m/Y"); var $name = $firstname; var $owner = 'Fred ' . 'Jones'; + var $items = array("DVD", "T&eacute;l&eacute;","Magn&eacute;toscope"); } /* Voici comment cela doit se faire d&eacute;sormais. */ class Caddie { var $date_du_jour; var $name; var $owner; + var $items; function Caddie() { $this->date_du_jour = date("d/m/Y"); $this->name = $GLOBALS['firstname']; /* etc... */ } } -?&lt; +?&gt; </programlisting> </informalexample> </note> @@ -74,21 +99,75 @@ &lt;?php $cart = new Caddie; $cart->add_item("10", 1); + $another_cart = new Cart; + $another_cart->add_item("0815", 3); ?&gt; </programlisting> </informalexample> <para> L'instruction ci-dessus cr&eacute;e l'objet $cart de la class Caddie. La fonction add_idem() est appel&eacute;e afin d'ajouter l'article - num&eacute;ro 10 dans la panier. + num&eacute;ro 10 dans le panier. 3 articles num&eacute;ro 0815 sont ajout&eacute;s au + cart $another_cart. </para> <para> - Une classe peut &ecirc;tre une extension d'une autre classe. - Les classes "extended" ou "derived" h&eacute;ritent de toutes - les variables et de toutes les fonctions de la classe p&egrave;re - plus toutes les d&eacute;finitions que vous rajoutez &agrave; cette - classe. Cela se fait avec le mot clef "extends". - L'h&eacute;ritage multiple n'est pas support&eacute;. + $cart et $another_cart disposent des fonctions add_item(), + remove_item() et de la variable items. Ce sont des fonctions + et variables distinctes. Vous pouvez vous repr&eacute;senter les + objets comme des dossiers sur votre disque dur. Vous pouvez + avoir deux fichiers "lisez-moi.txt" sur votre disque dur, tant qu'ils + ne sont pas dans le m&ecirc;me r&eacute;pertoire. De m&ecirc;me que vous devez alors + taper le chemin complet jusqu'au fichier, vous devez sp&eacute;cifier + le nom complet de la m&eacute;thode avant de l'employer : en termes PHP, + le dossier racine est l'espace de nom global, et le s&eacute;parateur + de dossier est <literal>-&gt;</literal>. Par exemple, les noms + $cart-&gt;items et $another_cart-&gt;items repr&eacute;sentent deux + variables distinctes. Notez que le nom de la variable est alors + $cart-&gt;items, et non pas $cart-&gt;$items : il n'y a qu'un seul + signe $ dans un nom de variable. + </para> + <informalexample> + <programlisting role="php"> +&lt;?php +// correct, $ unique +$cart->items = array("10" => 1); +// incorrect, car $cart->$items devient $cart->"" +$cart->$items = array("10" => 1); +// correct, mais risque de ne pas se comporter comme pr&eacute;vu +// $cart->$myvar devient $ncart->items +$myvar = 'items'; +$cart->$myvar = array("10" => 1); +?&gt; + </programlisting> + </informalexample> + <para> + A l'int&eacute;rieur d'une d&eacute;finition de classe, vous ne savez pas le + nom de la variable &agrave; partir duquel l'objet sera accessible dans + le script. On ne peut pr&eacute;voir que l'objet cr&eacute;&eacute; sera affect&eacute; &agrave; + la variable $cart ou $another_cart. Donc, vous ne pouvez pas + utiliser la syntaxe $cart-&gt;items. Mais pour pouvoir acc&eacute;der &agrave; + aux m&eacute;thodes et membres d'un objet, vous pouvez utiliser la variable + sp&eacute;ciale $this, qui peut s'interpr&eacute;ter comme 'moi-m&ecirc;me', ou bien + 'l'objet courant'. Par exemple, <literal>'$this->items[$artnr] += $num;'</literal> + peut se lire comme 'ajouter $num au compteur $artnr de mon propre tableau + de compteur' ou bien 'ajouter $num au compteur $artnr du tableau de compteurs + de l'objet courant'. + </para> + </sect1> + <sect1 id="keyword.extends"> + <title><literal>extends</literal> : h&eacute;ritage</title> + <para> + Souvent, vous aurez besoin d'une classe avec des m&eacute;thodes et + fonctions similaires &agrave; une autre classe. En fait, il est bon + de d&eacute;finir des classes g&eacute;n&eacute;riques, qui pourront &ecirc;tre r&eacute;utilis&eacute;es + et adapt&eacute;es &agrave; tous vos projets. Pour faciliter cela, une + classe peut &ecirc;tre une extension d'une autre classe. La classe + d&eacute;riv&eacute;e h&eacute;rite alors de toutes les m&eacute;thodes et variables de + la classe de base (cet h&eacute;ritage a &ccedil;a de bien que personne ne + meurt pour en profiter), mais peut d&eacute;finir ses propres fonctions + et variables, qui s'ajouteront. Une classe ne peut h&eacute;riter que + d'une seule autre classe, et l'h&eacute;ritage multiple n'est pas + support&eacute;. Les h&eacute;ritages se font avec le mot cl&eacute; 'extends'. </para> <informalexample> <programlisting role="php"> @@ -122,31 +201,25 @@ ?&gt; </programlisting> </informalexample> - <para> - Dans les fonctions d'une classe, la variable $this est - &eacute;gale &agrave; l'objet de la classe. Vous pouvez - utilisez la forme "$this->quelquechose" pour acc&eacute;der aux - fonctions ou aux variables de l'objet courant. Aussi bien - depuis l'objet lui-m&ecirc;me que de l'ext&eacute;rieur, vous n'avez pas - besoin de <literal>$</literal> pour acc&eacute;der aux - propri&eacute;t&eacute;s d'un objet. - </para> - <informalexample> - <programlisting role="php"> -&lt;?php -$ncart->owner = "chris"; // pas de '$' -$ncart->$owner = "chris"; -// Ceci est invalide, car $ncart->$owner &eacute;quivaut &agrave; $ncart->"" -$myvar = 'owner'; -$ncart->$myvar = "chris"; -// Ceci est valide, car $ncart->$owner &eacute;quivaut &agrave; $ncart->owner - </programlisting> - </informalexample> + </sect1> + <sect1 id="language.oop.constructor"> + <title><literal>Constructor</literal> : constructeur</title> + <caution> + <simpara> + En PHP 3 et PHP 4, les constructeurs se comportent diff&eacute;remment. + La s&eacute;mantique de PHP 4 est fortement recommand&eacute;e. + </simpara> + </caution> <para> Le constructeur est la fonction qui est appel&eacute;e automatiquement par la classe lorsque vous cr&eacute;ez - une nouvelle instance d'une classe. La fonction constructeur a + une nouvelle instance d'une classe a l'aide de l'op&eacute;rateur + <literal>new</literal>. La fonction constructeur a le m&ecirc;me nom que la classe. + En PHP 3, une fonction devient le constructeur si elle porte le + m&ecirc;me nom que la classe. En PHP 4, une fonction devient un constructeur + si elle porte le m&ecirc;me nom que la classe dans laquelle elle est d&eacute;finit. + La diff&eacute;rence est subtile, mais cruciale. </para> <informalexample> <programlisting role="php"> @@ -156,43 +229,353 @@ $this->add_item ("10", 1); } } +// Cette syntaxe est valable en PHP 3 et 4 ?&gt; </programlisting> </informalexample> - <para> + <para> L'exemple ci-dessus d&eacute;finit la classe Auto_Caddie qui h&eacute;rite de la classe Caddie et d&eacute;finit le construteur de la classe. Ce dernier initialise le panier avec 1 article de type num&eacute;ro 10 d&egrave;s que l'instruction "new" est - appel&eacute;e. La fonction constructeur peut prendre ou non, - des param&egrave;tres optionnels, ce qui la rend - beaucoup plus pratique. + appel&eacute;e. La fonction constructeur peut prendre ou non + des param&egrave;tres optionnels, ce qui la rend beaucoup plus + pratique. Pour pouvoir utiliser cette classe sans param&egrave;tre, + tous les param&egrave;tres du constructeurs devraient &ecirc;tre optionnels, + en fournissant une valeur par d&eacute;faut, comme ci-dessous. </para> <informalexample> <programlisting role="php"> -&lt;?php -class Constructor_Caddie extends Caddie { - function Constructor_Caddie ($item = "10", $num = 1) { +// Cette syntaxe est valable en PHP 3 et 4 +class Constructor_Cart extends Cart { + function Constructor_Cart ($item = "10", $num = 1) { $this->add_item ($item, $num); } } -// Place dans le caddie toujours la m&ecirc;me chose... -$default_cart = new Constructor_Caddie; -// Place dans le caddie des objets diff&eacute;rents, comme dans la -// r&eacute;alit&eacute; -$different_cart = new Constructor_Caddie ("20", 17); -?&gt; +// Cr&eacute;ation du caddie +$default_cart = new Constructor_Cart; +// Cr&eacute;ation d'un vrai caddie +$different_cart = new Constructor_Cart ("20", 17); </programlisting> </informalexample> <caution> <simpara> - Pour les classes qui utilisent l'h&eacute;ritage, - le constructeur de la classe p&egrave;re n'est pas - automatiquement appel&eacute; lorsque le constructeur de la classe - d&eacute;riv&eacute;e est appel&eacute;. + En PHP 3, les classes d&eacute;riv&eacute;es et les constructeurs ont un certains + nombre de limitations. Les exemples suivants doivent &ecirc;tre lus avec + beaucoup d'attention pour comprendre ces limitations. </simpara> </caution> + <informalexample> + <programlisting role="php"> +class A { + function A() { + echo "Je suis le constructeur de A.&lt;br&gt;\n"; + } +} +class B extends A { + function C() { + "Je suis une fonction standard.&lt;br&gt;\n"; + } +} +// Aucun constructeur n'est appel&eacute; en PHP 3!! +$b = new B; + </programlisting> + </informalexample> + <para> + En PHP 3, aucun constructeur ne sera appel&eacute; dans l'exemple ci-dessus. + La r&egrave;gle en PHP 3 est : 'Un constructeur est une fonction qui a le m&ecirc;me nom + que la classe'. Le nom de la classe est B, et il n'y a pas de fonctions qui + s'appelle B() dans la classe B. Rien ne se passe. + </para> + <para> + Ceci est corrig&eacute; en PHP 4, avec l'introduction d'une nouvelle r&egrave;gle : + Si une classe n'a pas de constructeur, le constructeur de la classe de + basse est appel&eacute;, s'il existe. L'exemple ci-dessus affichera + 'Je suis le constructeur de A.&lt;br&gt;' en PHP 4. + </para> + <informalexample> + <programlisting role="php"> +class A { + function A() { + echo "Je suis le constructeur de A.&lt;br&gt;\n"; + } + function B() { + echo "Je suis une fonction standard appel&eacute;e B dans la classe A.&lt;br&gt;\n"; + echo "Je ne suis pas le constructeur de A.&lt;br&gt;\n"; + } +} +class B extends A { + function C() { + "Je suis une fonction standard.&lt;br&gt;\n"; + } +} +// Cette syntaxe va appeler B() comme constructeur. +$b = new B; + </programlisting> + </informalexample> + <para> + En PHP 3, la fonction B() de la classe A va soudaiement devenir le + constructeur de la classe B, bien qu'il n'ai pas &eacute;t&eacute; pr&eacute;vu pour. + La r&egrave;gle de PHP 3 est 'Un constructeur est une fonction qui a le m&ecirc;me nom + que la classe'. PHP 3 ne se soucie gu&egrave;re si la fonction est d&eacute;finie + dans la classe B ou si elle a &eacute;t&eacute; h&eacute;rit&eacute;e. + </para> + <para> + Ceci est corrig&eacute; en PHP 4, avec l'introduction d'une nouvelle r&egrave;gle : + 'Un constructeur est une classe de m&ecirc;me nom, d&eacute;finit dans la classe + elle-m&ecirc;me'. Donc, en PHP 4, la classe B n'a pas de constructeur par elle-m&ecirc;me, + et le constructeur de la classe A aura &eacute;t&eacute; appel&eacute;, affichant : + 'Je suis le constructeur de A.&lt;br&gt;'. + </para> + <caution> + <simpara> + Ni PHP 3 ni PHP 4 n'appelle automatiquement le constructeur de + la classe sup&eacute;rieure depuis le constructeur de la classe d&eacute;riv&eacute;e. + Il est de votre responsabilit&eacute; de propager l'appel des constructeurs. + </simpara> + </caution> + <note> + <simpara> + Il n'y a pas de destructeurs en PHP 3 et PHP 4. Vous pouvez utiliser + la fonction <function>register_shutdown_function</function> &agrave; la place, + pour simuler un destructeur. + </simpara> + </note> + <para> + Les destructeurs sont des fonctions qui sont appel&eacute;es lorsqu'un + objet est d&eacute;truit, soit avec la fonction <function>unset</function> + soit par simple sortie d'une fonction (cas des variables locales). + Il n'y a pas de destructeurs en PHP. + </para> </sect1> + <sect1 id="keyword.paamayim_nekudotayim"> + <title>Op&eacute;rateur <literal>::</literal></title> + <caution> + <simpara> + La documentation suivante n'est valable que pour PHP 4. + </simpara> + </caution> + <para> + Parfois, il est pratique de faire r&eacute;f&eacute;rence aux fonctions + est variables d'une classe de base, ou bien d'utiliser + des m&eacute;thodes de classes qui n'ont pas encore d'objets + cr&eacute;&eacute;s. L'op&eacute;rateur <literal>::</literal> est l&agrave; pour ces + situations. + </para> + <informalexample> + <programlisting role="php"> +&lt;?php +class A { + function example() { + echo "Je suis la fonction originale A::example().&lt;br&gt;\n"; + } +} +class B extends A { + function example() { + echo "Je suis la fonction red&eacute;finie B::example().&lt;br&gt;\n"; + A::example(); + } +} +// Il n'y a pas d'objets de classe A. +// L'affichage est : +// Je suis la fonction originale A::example().&lt;br&gt; +A::example(); +// Cr&eacute;ation d'un objet de la classe B. +$b = new B; +// L'affichage est : +// Je suis la fonction red&eacute;finie B::example().&lt;br&gt; +// Je suis la fonction originale A::example().&lt;br&gt; +$b->example(); +?&gt; + </programlisting> + </informalexample> + <para> + Les exemples ci-dessus appellent la fonction example() dans la + classe A, mais il n'y a pas encore d'objet de classe A, alors il + n'est pas possible d'&eacute;crire $a->example(). A la place, on appelle + la fonction example() comme une fonction de classe, c'est-&agrave;-dire + avec le nom de la classe elle-m&ecirc;me, et sans objet. + </para> + <para> + Il y a des fonctions de classe, mais pas de variables de classe. + En fait, il n'y a aucun objet au moment de l'appel de la fonction. + Donc, une fonction de classe ne peut acc&eacute;der &agrave; aucune variable + (mais elle peut acc&eacute;der aux variables locales et globales). + Il faut proscire l'utilisation de $this. + </para> + <para> + Dans l'exemple ci-dessus, la classe B red&eacute;finit la fonction example(). + La d&eacute;finition originale dans la classe A est remplac&eacute;e par celle de + B, et n'est plus accessible depuis B, &agrave; moins que vous n'appeliez + sp&eacute;cifiquement la fonction example() de la classe A avec l'op&eacute;rateur + ::. Ecrivez A::example() pour cela (en fait, il faudrait &eacute;crire + parent::example(), comme expliqu&eacute; dans la section suivante). + </para> + <para> + Dans ce contexte, il y a un objet courant, qui peut avoir d'autres + variables objets. De ce fait, lorsqu'il est utilis&eacute; depuis une m&eacute;thode + d'un objet, vous pouvez utiliser $this. + </para> + </sect1> + <sect1 id="keyword.parent"> + <title><literal>parent</literal></title> + <para> + Il arrive que vous ayez &agrave; &eacute;crire du code qui faire r&eacute;f&eacute;rence + aux variables et fonctions des classes de base. C'est particuli&egrave;rement + vrai si votre classe d&eacute;riv&eacute;e est une sp&eacute;cialisation de votre classe + de base. + </para> + <para> + Au lieu d'utiliser le nom lit&eacute;ral de votre classe de base dans + votre code, vous pouvez utiliser le mot r&eacute;serv&eacute; + <literal>parent</literal>, qui repr&eacute;sente votre classe de + base (celle indiqu&eacute; par <literal>extends</literal>, dans la d&eacute;claration + de votre classe). En faisant cela, vous &eacute;viter d'appeler le + nom de votre classe de base directement dans votre code. + Si votre h&eacute;ritage change, vous n'aurez plus qu'&agrave; modifier + le nom de la classe dans la d&eacute;claration <literal>extends</literal> + de votre classe. + </para> + <informalexample> + <programlisting role="php"> +&lt;?php +class A { + function example() { + echo "Je suis A::example() et je fournis une fonctionnalit&eacute; de base.&lt;br&gt;\n"; + } +} +class B extends A { + function example() { + echo "Je suis B::example() et je fournis une fonctionnalit&eacute; suppl&eacute;mentaire.&lt;br&gt;\n"; + parent::example(); + } +} +$b = new B; +// Cette syntaxe va appeler B::example(), qui, &agrave; sont tour, va appeler A::example(). +$b->example(); +?&gt; + </programlisting> + </informalexample> + </sect1> + <sect1 id="language.oop.serialization"> + <title>Sauvegarde d'objets - cas des sessions</title> + <note> + <simpara> + En PHP 3, les objets perdent leur association de classe &agrave; travers + le processus de sauvegarde et relecture. Le type de la variable apr&egrave;s + relecture est bien objet mais il n'a plus de m&eacute;thode ou de nom + de classe. Cela rend la focntionnalit&eacute; plut&ocirc;t inutile (l'objet + est devenu un tableau avec une syntaxe &eacute;trange). + </simpara> + </note> + <caution> + <simpara> + La documentation suivante n'est valable que pour PHP 4. + </simpara> + </caution> + <para> + <function>serialize</function> retourne une cha&icirc;ne repr&eacute;sentant + une valeur qui peut &ecirc;tre stock&eacute;e dans les sessions de PHP, ou une + base de donn&eacute;es. <function>unserialize</function> peut relire cette + cha&icirc;ne pour recr&eacute;er la valeur originale. <function>serialize</function> + va sauver toutes les variables d'un objet. Le nom de la classe sera + sauv&eacute; mais par les m&eacute;thodes de cet objet. + </para> + <para> + Pour permettre &agrave; <function>unserialize</function> de lire un objet, + la classe de cet objet doit &ecirc;tre d&eacute;finie. C'est-&agrave;-dire, si vous avez + un objet $a de la classe A dans une page php1.php, et que vous le + lin&eacute;arisez avec <function>serialize</function>, vous obtiendrez une + cha&icirc;ne qui fait r&eacute;f&eacute;rence &agrave; la classe A, et contient toutes les valeurs + de $a. Pour pouvoir le relire avec la fonction <function>unserialize</function> + dans une page page2.php, il faut que la d&eacute;finition de la classe + A soit pr&eacute;sente dans cette deuxi&egrave;me page. Cela peut se faire + de mani&egrave;re pratique en sauvant la d&eacute;finition de la classe A dans un + fichier s&eacute;par&eacute;, et en l'incluant dans les deux pages page1.php et + page2.php. + </para> + <informalexample> + <programlisting role="php"> +&lt;?php +classa.inc: + class A { + var $one = 1; + function show_one() { + echo $this->one; + } + } +?&gt; +page1.php: +&lt;?php + include("classa.inc"); + $a = new A; + $s = serialize($a); + // enregistrez $s o&ugrave; la page2.php pourra le trouver. + $fp = fopen("store", "w"); + echo $s; + fclose($fp); +?&gt; +page2.php: +&lt;?php + // Ceci est n&eacute;cessaire pour que unserialize() fonctionne correctement + include("classa.inc"); + $s = implode("", @file("store")); + unserialize($s); + // maintenant, utilisez la m&eacute;thode show_one de l'objet $a. + $a->show_one(); +?&gt; + </programlisting> + </informalexample> + <para> + Si vous utilisez les sessions et la fonction <function>session_register</function> + pour sauver des objets, ces objets seront lin&eacute;aris&eacute;s automatiquement + avec la fonction <function>serialize</function> &agrave; la fin de chaque + script, et relus avec <function>unserialize</function> au d&eacute;but du prochain + script. Cela signifie que ces objets peuvent appara&icirc;tre dans n'importe quelle + page qui utilise vos sessions. + </para> + <para> + Il est vivement recommand&eacute; d'inclure la d&eacute;finition de classe dans + toutes vos pages, m&ecirc;me si vous n'utilisez pas ces classes dans + toutes vos pages. Si vous l'oubliez et qu'un tel objet est + pr&eacute;sent, il perdra sa classe, et deviendra un objet de classe + <literal>stdClass</literal> sans aucune fonction, et donc, plut&ocirc;t + inutile. + </para> + <para> + Si, dans l'exemple ci-dessus, $a devient un objet de session + avec l'utilisation de <literal>session_register("a")</literal>, vous + devez pensez &agrave; inclure le fichier <literal>classa.inc</literal> dans toutes + vos pages, et pas seulement page1.php et page2.php. + </para> + </sect1> + <sect1 id="language.oop.magic-functions"> + <title>Les fonctions magiques <literal>__sleep</literal> et <literal>__wakeup</literal></title> + <para> + <function>serialize</function> s'assure que votre classe a une m&eacute;thode + avec le nom magique <literal>__sleep</literal>. Si c'est le cas, cette + fonction est appel&eacute;e avant toute lin&eacute;arisation. Elle peut alors nettoyer + l'objet et on s'attend &agrave; ce qu'elle retourne un tableau avec la liste des + noms de variables qui doivent &ecirc;tre sauv&eacute;es. + </para> + <para> + Le but de cette fonction <literal>__sleep</literal> est de fermer + proprement toute connexion &agrave; une base de donn&eacute;es, de valider les + requ&ecirc;tes, de finaliser toutes les actions commenc&eacute;es. Cette fonction + est aussi pratique si vous ave de tr&egrave;s grands objets qui n'ont pas + besoin d'&ecirc;tre sauv&eacute; enti&egrave;rement. + </para> + <para> + A l'inverse, <function>unserialize</function> s'assure de la pr&eacute;sence + de la fonction magique <literal>__wakeup</literal>. Si elle existe, cette + fonction reconstruit toutes les ressources d'un objet. + </para> + <para> + Le but de cette fonction <literal>__wakeup</literal> est de r&eacute;tablit + toutes les connexions aux bases de donn&eacute;es, et de recr&eacute;er les + variables qui n'ont pas &eacute;t&eacute; sauv&eacute;es. + </para> + </sect1> <sect1 id="keyword.newref"> <title>R&eacute;f&eacute;rences dans un constructeur</title> <para> @@ -249,7 +632,7 @@ </programlisting> </informalexample> <para> - Apparement, il n'y a pas de diff&eacute;rence, mais en fait, il y en a une + Apparament, il n'y a pas de diff&eacute;rence, mais en fait, il y en a une significative : <varname>$bar1</varname> et <varname>$globalref[0]</varname> ne sont pas r&eacute;f&eacute;renc&eacute;es, ces deux variables sont diff&eacute;rentes. Cela est du au fait que l'op&eacute;rateur "new"ne retourne par de r&eacute;f&eacute;rence, @@ -260,9 +643,9 @@ r&eacute;f&eacute;rence) &agrave; retourner des copies au lieu de r&eacute;f&eacute;rences. Au contraire, il est souvent mieux de travailler sur les copies plut&ocirc;t que sur les r&eacute;f&eacute;rences, car cr&eacute;er une r&eacute;f&eacute;rence prend un peu plus de temps que de cr&eacute;er une copie - qui ne prend virtuellement pas de temps (&agrave; moins qu'il ne se cr&eacute;e un - tableau g&eacute;ant ou un objet monstreux, auquel cas il est pr&eacute;f&eacute;rable de passer - par des r&eacute;f&eacute;rences). + qui ne prend virtuellement pas de temps (&agrave; moins de cr&eacute;er un + tableau g&eacute;ant ou un objet monstreux, auquel cas il est + pr&eacute;f&eacute;rable de passer par des r&eacute;f&eacute;rences). </simpara> </note> Pour prouver ceci, regardez le code suivant : @@ -270,9 +653,9 @@ <informalexample> <programlisting role="php"> &lt;?php - // maintenant, nous allons changer de nom. Qu'attendez vous? + // maintenant, nous allons changer de nom. Qu'attendez-vous? // Vous pouvez vous attendre &agrave; ce que les deux variables $bar - // et $globalref[0] change de nom... + // et $globalref[0] changent de nom... $bar1-&gt;setName('modifi&eacute;'); // comme pr&eacute;dit, ce n'est pas le cas $bar1-&gt;echoName(); @@ -321,7 +704,8 @@ } } // Essayez de comprendre pourquoi une copie simple va -// conduire &agrave; un r&eacute;sultat ind&eacute;sirable &agrave; la ligne marqu&eacute;e d'une &eacute;toile +// conduire &agrave; un r&eacute;sultat ind&eacute;sirable &agrave; +// la ligne marqu&eacute;e d'une &eacute;toile $a =&amp;new a(10); $a-&gt;createRef(); $a-&gt;echoValue();
« previous php.doc (#969336333) next »