Zend_Memory-MemoryObjects.xml 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.memory.memory-objects">
  5. <title>Objet mémoire</title>
  6. <sect2 id="zend.memory.memory-objects.movable">
  7. <title>Mobile</title>
  8. <para>
  9. Créer des objets mémoires mobiles en utilisant la méthode
  10. <methodname>create([$data])</methodname> du manager de mémoire : <programlisting
  11. role="php"><![CDATA[
  12. $memObject = $memoryManager->create($data);
  13. ]]></programlisting></para>
  14. <para>
  15. "Mobile" signifie que de tels objets peuvent être mis en cache et déchargés de la
  16. mémoire et chargés ensuite quand le code de l'application accède à l'objet.
  17. </para>
  18. </sect2>
  19. <sect2 id="zend.memory.memory-objects.locked">
  20. <title>Verrouillé</title>
  21. <para>
  22. Créer des objets mémoires verrouillés en utilisant la méthode
  23. <methodname>createLocked([$data])</methodname> du manager de mémoire : <programlisting
  24. role="php"><![CDATA[
  25. $memObject = $memoryManager->createLocked($data);
  26. ]]></programlisting></para>
  27. <para>
  28. "Verrouillé" signifie que de tels objets ne sont jamais mis en cache et déchargés
  29. de la mémoire.
  30. </para>
  31. <para>
  32. Les objets verrouillés fournissent la même interface que des objets mobiles
  33. (<classname>Zend_Memory_Container_Interface</classname>). Donc l'objet verrouillé peut
  34. être utilisé en n'importe quel endroit à la place des objets mobiles.
  35. </para>
  36. <para>
  37. Il est utile si une application ou un développeur peut décider, que quelques
  38. objets ne devraient jamais être mis en cache, en se basant sur des considérations de
  39. performance.
  40. </para>
  41. <para>
  42. L'accès aux objets verrouillés est plus rapide, parce que le manager de mémoire ne
  43. doit pas suivre à la trace des changements pour ces objets.
  44. </para>
  45. <para>
  46. La classe d'objets verrouillés
  47. (<classname>Zend_Memory_Container_Locked</classname>) garantit pratiquement la même
  48. performance qu'en travaillant avec une variable de type chaîne de caractères. La couche
  49. supérieure est un simple référence pour récupérer la propriété de classe.
  50. </para>
  51. </sect2>
  52. <sect2 id="zend.memory.memory-objects.value">
  53. <title>Propriété "value" du manager de mémoire</title>
  54. <para>
  55. Utilisez la propriété "<property>value</property>" du conteneur de mémoire (mobile ou
  56. verrouillé) pour travailler avec les données des objets mémoire : <programlisting
  57. role="php"><![CDATA[
  58. $memObject = $memoryManager->create($data);
  59. echo $memObject->value;
  60. $memObject->value = $newValue;
  61. $memObject->value[$index] = '_';
  62. echo ord($memObject->value[$index1]);
  63. $memObject->value = substr($memObject->value, $start, $length);
  64. ]]></programlisting></para>
  65. <para>
  66. Une autre manière d'accéder aux données d'objet mémoire est d'utiliser la méthode
  67. <link linkend="zend.memory.memory-objects.api.getRef"><methodname>getRef()</methodname></link>.
  68. Cette méthode <emphasis>doit</emphasis> être utilisée pour les versions de <acronym>PHP</acronym>
  69. inférieure à 5.2. Il devrait aussi être utilisé dans quelques autres cas pour des
  70. raisons de performance.
  71. </para>
  72. </sect2>
  73. <sect2 id="zend.memory.memory-objects.api">
  74. <title>Interface du conteneur de mémoire</title>
  75. <para>Le conteneur de mémoire fournit les méthodes suivantes :</para>
  76. <sect3 id="zend.memory.memory-objects.api.getRef">
  77. <title>La méthode getRef()</title>
  78. <programlisting language="php"><![CDATA[
  79. public function &getRef();
  80. ]]></programlisting>
  81. <para>
  82. La méthode <methodname>getRef()</methodname> retourne la référence vers une valeur
  83. d'objet.
  84. </para>
  85. <para>
  86. Des objets mobiles sont chargés du cache à ce moment si l'objet n'est pas déjà
  87. dans la mémoire. Si l'objet est chargé du cache, cela pourrait entraîner la mise en
  88. cache d'autres objets si la limite de mémoire était dépassée en ayant tous les
  89. objets en mémoire.
  90. </para>
  91. <para>
  92. La méthode <methodname>getRef()</methodname> <emphasis>doit</emphasis> être utilisée pour
  93. accéder aux données d'objet mémoire si la version de <acronym>PHP</acronym> est inférieure à 5.2
  94. </para>
  95. <para>
  96. Suivre à la trace les changements de ces données nécessitent des ressources
  97. supplémentaires. La méthode <methodname>getRef()</methodname> retourne une référence à une
  98. chaîne, qui est changé directement par l'utilisateur de l'application. Ainsi, c'est
  99. une bonne idée d'utiliser la méthode <methodname>getRef()</methodname> pour le traitement des
  100. données : <programlisting language="php"><![CDATA[
  101. $memObject = $memoryManager->create($data);
  102. $value = &$memObject->getRef();
  103. for ($count = 0; $count < strlen($value); $count++) {
  104. $char = $value[$count];
  105. ...
  106. }
  107. ]]></programlisting></para>
  108. </sect3>
  109. <sect3 id="zend.memory.memory-objects.api.touch">
  110. <title>La méthode touch()</title>
  111. <programlisting language="php"><![CDATA[
  112. public function touch();
  113. ]]></programlisting>
  114. <para>
  115. La méthode <methodname>touch()</methodname> devrait être employée en commun avec
  116. <methodname>getRef()</methodname>. Elle signale que la valeur d'objet a été changé :
  117. <programlisting language="php"><![CDATA[
  118. $memObject = $memoryManager->create($data);
  119. ...
  120. $value = &$memObject->getRef();
  121. for ($count = 0; $count < strlen($value); $count++) {
  122. ...
  123. if ($condition) {
  124. $value[$count] = $char;
  125. }
  126. ...
  127. }
  128. $memObject->touch();
  129. ]]></programlisting></para>
  130. </sect3>
  131. <sect3 id="zend.memory.memory-objects.api.lock">
  132. <title>La méthode lock()</title>
  133. <programlisting language="php"><![CDATA[
  134. public function lock();
  135. ]]></programlisting>
  136. <para>
  137. La méthode <methodname>lock()</methodname> verrouille l'objet en mémoire. Elle devrait
  138. être utilisé pour empêcher la mise en cache des objets que vous choisissez.
  139. Normalement, ce n'est pas nécessaire, parce que le manager de mémoire utilise un
  140. algorithme intelligent pour choisir des candidats à la mise en cache. Mais si vous
  141. savez exactement, qu'à cette endroit du code certains objets ne devraient pas être
  142. mis en cache, vous pouvez les verrouiller.
  143. </para>
  144. <para>
  145. Le verrouillage d'objets dans la mémoire garantit aussi que la référence
  146. retournée par la méthode <methodname>getRef()</methodname> est valable jusqu'à ce que vous
  147. déverrouiller l'objet : <programlisting language="php"><![CDATA[
  148. $memObject1 = $memoryManager->create($data1);
  149. $memObject2 = $memoryManager->create($data2);
  150. ...
  151. $memObject1->lock();
  152. $memObject2->lock();
  153. $value1 = &$memObject1->getRef();
  154. $value2 = &$memObject2->getRef();
  155. for ($count = 0; $count < strlen($value2); $count++) {
  156. $value1 .= $value2[$count];
  157. }
  158. $memObject1->touch();
  159. $memObject1->unlock();
  160. $memObject2->unlock();
  161. ]]></programlisting></para>
  162. </sect3>
  163. <sect3 id="zend.memory.memory-objects.api.unlock">
  164. <title>La méthode unlock()</title>
  165. <programlisting language="php"><![CDATA[
  166. public function unlock();
  167. ]]></programlisting>
  168. <para>
  169. La méthode <methodname>unlock()</methodname> déverrouille l'objet quand il n'est plus
  170. nécessaire de maintenir verrouillé. Voir l'exemple ci-dessus.
  171. </para>
  172. </sect3>
  173. <sect3 id="zend.memory.memory-objects.api.isLocked">
  174. <title>La méthode isLocked()</title>
  175. <programlisting language="php"><![CDATA[
  176. public function isLocked();
  177. ]]></programlisting>
  178. <para>
  179. La méthode <methodname>isLocked()</methodname> peut être utilisée pour vérifier si l'objet
  180. est verrouillé. Il retourne <constant>TRUE</constant> si l'objet est verrouillé, ou
  181. <constant>FALSE</constant> s'il n'est pas verrouillé. C'est toujours <constant>TRUE</constant> pour
  182. les objets "verrouillés" et peut être <constant>TRUE</constant> ou <constant>FALSE</constant> pour
  183. des objets "mobiles".
  184. </para>
  185. </sect3>
  186. </sect2>
  187. </sect1>