1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 21829 -->
4 <sect1 id="zend.memory.memory-objects">
5 <title>Objet mémoire</title>
7 <sect2 id="zend.memory.memory-objects.movable">
11 Créer des objets mémoires mobiles en utilisant la méthode
12 <methodname>create([$data])</methodname> du manager de mémoire : <programlisting
14 $memObject = $memoryManager->create($data);
15 ]]></programlisting></para>
18 "Mobile" signifie que de tels objets peuvent être mis en cache et déchargés de la
19 mémoire et chargés ensuite quand le code de l'application accède à l'objet.
23 <sect2 id="zend.memory.memory-objects.locked">
24 <title>Verrouillé</title>
27 Créer des objets mémoires verrouillés en utilisant la méthode
28 <methodname>createLocked([$data])</methodname> du manager de mémoire : <programlisting
30 $memObject = $memoryManager->createLocked($data);
31 ]]></programlisting></para>
34 "Verrouillé" signifie que de tels objets ne sont jamais mis en cache et déchargés
39 Les objets verrouillés fournissent la même interface que des objets mobiles
40 (<classname>Zend_Memory_Container_Interface</classname>). Donc l'objet verrouillé peut
41 être utilisé en n'importe quel endroit à la place des objets mobiles.
45 Il est utile si une application ou un développeur peut décider, que quelques
46 objets ne devraient jamais être mis en cache, en se basant sur des considérations de
51 L'accès aux objets verrouillés est plus rapide, parce que le manager de mémoire ne
52 doit pas suivre à la trace des changements pour ces objets.
56 La classe d'objets verrouillés
57 (<classname>Zend_Memory_Container_Locked</classname>) garantit pratiquement la même
58 performance qu'en travaillant avec une variable de type chaîne de caractères. La couche
59 supérieure est un simple référence pour récupérer la propriété de classe.
63 <sect2 id="zend.memory.memory-objects.value">
64 <title>Propriété "value" du manager de mémoire</title>
67 Utilisez la propriété "<code>value</code>" du conteneur de mémoire (mobile ou
68 verrouillé) pour travailler avec les données des objets mémoire : <programlisting
70 $memObject = $memoryManager->create($data);
72 echo $memObject->value;
74 $memObject->value = $newValue;
76 $memObject->value[$index] = '_';
78 echo ord($memObject->value[$index1]);
80 $memObject->value = substr($memObject->value, $start, $length);
81 ]]></programlisting></para>
84 Une autre manière d'accéder aux données d'objet mémoire est d'utiliser la méthode
85 <link linkend="zend.memory.memory-objects.api.getRef"><methodname>getRef()</methodname></link>.
86 Cette méthode <emphasis>doit</emphasis> être utilisée pour les versions de <acronym>PHP</acronym>
87 inférieure à 5.2. Il devrait aussi être utilisé dans quelques autres cas pour des
88 raisons de performance.
92 <sect2 id="zend.memory.memory-objects.api">
93 <title>Interface du conteneur de mémoire</title>
95 <para>Le conteneur de mémoire fournit les méthodes suivantes :</para>
97 <sect3 id="zend.memory.memory-objects.api.getRef">
98 <title>La méthode getRef()</title>
100 <programlisting language="php"><![CDATA[
101 public function &getRef();
105 La méthode <methodname>getRef()</methodname> retourne la référence vers une valeur
110 Des objets mobiles sont chargés du cache à ce moment si l'objet n'est pas déjà
111 dans la mémoire. Si l'objet est chargé du cache, cela pourrait entraîner la mise en
112 cache d'autres objets si la limite de mémoire était dépassée en ayant tous les
117 La méthode <methodname>getRef()</methodname> <emphasis>doit</emphasis> être utilisée pour
118 accéder aux données d'objet mémoire si la version de <acronym>PHP</acronym> est inférieure à 5.2
122 Suivre à la trace les changements de ces données nécessitent des ressources
123 supplémentaires. La méthode <methodname>getRef()</methodname> retourne une référence à une
124 chaîne, qui est changé directement par l'utilisateur de l'application. Ainsi, c'est
125 une bonne idée d'utiliser la méthode <methodname>getRef()</methodname> pour le traitement des
126 données : <programlisting language="php"><![CDATA[
127 $memObject = $memoryManager->create($data);
129 $value = &$memObject->getRef();
131 for ($count = 0; $count < strlen($value); $count++) {
132 $char = $value[$count];
135 ]]></programlisting></para>
138 <sect3 id="zend.memory.memory-objects.api.touch">
139 <title>La méthode touch()</title>
141 <programlisting language="php"><![CDATA[
142 public function touch();
146 La méthode <methodname>touch()</methodname> devrait être employée en commun avec
147 <methodname>getRef()</methodname>. Elle signale que la valeur d'objet a été changé :
148 <programlisting language="php"><![CDATA[
149 $memObject = $memoryManager->create($data);
152 $value = &$memObject->getRef();
154 for ($count = 0; $count < strlen($value); $count++) {
157 $value[$count] = $char;
163 ]]></programlisting></para>
166 <sect3 id="zend.memory.memory-objects.api.lock">
167 <title>La méthode lock()</title>
169 <programlisting language="php"><![CDATA[
170 public function lock();
174 La méthode <methodname>lock()</methodname> verrouille l'objet en mémoire. Elle devrait
175 être utilisé pour empêcher la mise en cache des objets que vous choisissez.
176 Normalement, ce n'est pas nécessaire, parce que le manager de mémoire utilise un
177 algorithme intelligent pour choisir des candidats à la mise en cache. Mais si vous
178 savez exactement, qu'à cette endroit du code certains objets ne devraient pas être
179 mis en cache, vous pouvez les verrouiller.
183 Le verrouillage d'objets dans la mémoire garantit aussi que la référence
184 retournée par la méthode <methodname>getRef()</methodname> est valable jusqu'à ce que vous
185 déverrouiller l'objet : <programlisting language="php"><![CDATA[
186 $memObject1 = $memoryManager->create($data1);
187 $memObject2 = $memoryManager->create($data2);
193 $value1 = &$memObject1->getRef();
194 $value2 = &$memObject2->getRef();
196 for ($count = 0; $count < strlen($value2); $count++) {
197 $value1 .= $value2[$count];
200 $memObject1->touch();
201 $memObject1->unlock();
202 $memObject2->unlock();
203 ]]></programlisting></para>
206 <sect3 id="zend.memory.memory-objects.api.unlock">
207 <title>La méthode unlock()</title>
209 <programlisting language="php"><![CDATA[
210 public function unlock();
214 La méthode <methodname>unlock()</methodname> déverrouille l'objet quand il n'est plus
215 nécessaire de maintenir verrouillé. Voir l'exemple ci-dessus.
219 <sect3 id="zend.memory.memory-objects.api.isLocked">
220 <title>La méthode isLocked()</title>
222 <programlisting language="php"><![CDATA[
223 public function isLocked();
227 La méthode <methodname>isLocked()</methodname> peut être utilisée pour vérifier si l'objet
228 est verrouillé. Il retourne <constant>TRUE</constant> si l'objet est verrouillé, ou
229 <constant>FALSE</constant> s'il n'est pas verrouillé. C'est toujours <constant>TRUE</constant> pour
230 les objets "verrouillés" et peut être <constant>TRUE</constant> ou <constant>FALSE</constant> pour
231 des objets "mobiles".