Zend_Memory-MemoryObjects.xml 7.8 KB

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