| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.memory.memory-objects">
- <title>Objet mémoire</title>
- <sect2 id="zend.memory.memory-objects.movable">
- <title>Mobile</title>
- <para>
- Créer des objets mémoires mobiles en utilisant la méthode
- <methodname>create([$data])</methodname> du manager de mémoire : <programlisting
- role="php"><![CDATA[
- $memObject = $memoryManager->create($data);
- ]]></programlisting></para>
- <para>
- "Mobile" signifie que de tels objets peuvent être mis en cache et déchargés de la
- mémoire et chargés ensuite quand le code de l'application accède à l'objet.
- </para>
- </sect2>
- <sect2 id="zend.memory.memory-objects.locked">
- <title>Verrouillé</title>
- <para>
- Créer des objets mémoires verrouillés en utilisant la méthode
- <methodname>createLocked([$data])</methodname> du manager de mémoire : <programlisting
- role="php"><![CDATA[
- $memObject = $memoryManager->createLocked($data);
- ]]></programlisting></para>
- <para>
- "Verrouillé" signifie que de tels objets ne sont jamais mis en cache et déchargés
- de la mémoire.
- </para>
- <para>
- Les objets verrouillés fournissent la même interface que des objets mobiles
- (<classname>Zend_Memory_Container_Interface</classname>). Donc l'objet verrouillé peut
- être utilisé en n'importe quel endroit à la place des objets mobiles.
- </para>
- <para>
- Il est utile si une application ou un développeur peut décider, que quelques
- objets ne devraient jamais être mis en cache, en se basant sur des considérations de
- performance.
- </para>
- <para>
- L'accès aux objets verrouillés est plus rapide, parce que le manager de mémoire ne
- doit pas suivre à la trace des changements pour ces objets.
- </para>
- <para>
- La classe d'objets verrouillés
- (<classname>Zend_Memory_Container_Locked</classname>) garantit pratiquement la même
- performance qu'en travaillant avec une variable de type chaîne de caractères. La couche
- supérieure est un simple référence pour récupérer la propriété de classe.
- </para>
- </sect2>
- <sect2 id="zend.memory.memory-objects.value">
- <title>Propriété "value" du manager de mémoire</title>
- <para>
- Utilisez la propriété "<property>value</property>" du conteneur de mémoire (mobile ou
- verrouillé) pour travailler avec les données des objets mémoire : <programlisting
- role="php"><![CDATA[
- $memObject = $memoryManager->create($data);
- echo $memObject->value;
- $memObject->value = $newValue;
- $memObject->value[$index] = '_';
- echo ord($memObject->value[$index1]);
- $memObject->value = substr($memObject->value, $start, $length);
- ]]></programlisting></para>
- <para>
- Une autre manière d'accéder aux données d'objet mémoire est d'utiliser la méthode
- <link linkend="zend.memory.memory-objects.api.getRef"><methodname>getRef()</methodname></link>.
- Cette méthode <emphasis>doit</emphasis> être utilisée pour les versions de <acronym>PHP</acronym>
- inférieure à 5.2. Il devrait aussi être utilisé dans quelques autres cas pour des
- raisons de performance.
- </para>
- </sect2>
- <sect2 id="zend.memory.memory-objects.api">
- <title>Interface du conteneur de mémoire</title>
- <para>Le conteneur de mémoire fournit les méthodes suivantes :</para>
- <sect3 id="zend.memory.memory-objects.api.getRef">
- <title>La méthode getRef()</title>
- <programlisting language="php"><![CDATA[
- public function &getRef();
- ]]></programlisting>
- <para>
- La méthode <methodname>getRef()</methodname> retourne la référence vers une valeur
- d'objet.
- </para>
- <para>
- Des objets mobiles sont chargés du cache à ce moment si l'objet n'est pas déjà
- dans la mémoire. Si l'objet est chargé du cache, cela pourrait entraîner la mise en
- cache d'autres objets si la limite de mémoire était dépassée en ayant tous les
- objets en mémoire.
- </para>
- <para>
- La méthode <methodname>getRef()</methodname> <emphasis>doit</emphasis> être utilisée pour
- accéder aux données d'objet mémoire si la version de <acronym>PHP</acronym> est inférieure à 5.2
- </para>
- <para>
- Suivre à la trace les changements de ces données nécessitent des ressources
- supplémentaires. La méthode <methodname>getRef()</methodname> retourne une référence à une
- chaîne, qui est changé directement par l'utilisateur de l'application. Ainsi, c'est
- une bonne idée d'utiliser la méthode <methodname>getRef()</methodname> pour le traitement des
- données : <programlisting language="php"><![CDATA[
- $memObject = $memoryManager->create($data);
- $value = &$memObject->getRef();
- for ($count = 0; $count < strlen($value); $count++) {
- $char = $value[$count];
- ...
- }
- ]]></programlisting></para>
- </sect3>
- <sect3 id="zend.memory.memory-objects.api.touch">
- <title>La méthode touch()</title>
- <programlisting language="php"><![CDATA[
- public function touch();
- ]]></programlisting>
- <para>
- La méthode <methodname>touch()</methodname> devrait être employée en commun avec
- <methodname>getRef()</methodname>. Elle signale que la valeur d'objet a été changé :
- <programlisting language="php"><![CDATA[
- $memObject = $memoryManager->create($data);
- ...
- $value = &$memObject->getRef();
- for ($count = 0; $count < strlen($value); $count++) {
- ...
- if ($condition) {
- $value[$count] = $char;
- }
- ...
- }
- $memObject->touch();
- ]]></programlisting></para>
- </sect3>
- <sect3 id="zend.memory.memory-objects.api.lock">
- <title>La méthode lock()</title>
- <programlisting language="php"><![CDATA[
- public function lock();
- ]]></programlisting>
- <para>
- La méthode <methodname>lock()</methodname> verrouille l'objet en mémoire. Elle devrait
- être utilisé pour empêcher la mise en cache des objets que vous choisissez.
- Normalement, ce n'est pas nécessaire, parce que le manager de mémoire utilise un
- algorithme intelligent pour choisir des candidats à la mise en cache. Mais si vous
- savez exactement, qu'à cette endroit du code certains objets ne devraient pas être
- mis en cache, vous pouvez les verrouiller.
- </para>
- <para>
- Le verrouillage d'objets dans la mémoire garantit aussi que la référence
- retournée par la méthode <methodname>getRef()</methodname> est valable jusqu'à ce que vous
- déverrouiller l'objet : <programlisting language="php"><![CDATA[
- $memObject1 = $memoryManager->create($data1);
- $memObject2 = $memoryManager->create($data2);
- ...
- $memObject1->lock();
- $memObject2->lock();
- $value1 = &$memObject1->getRef();
- $value2 = &$memObject2->getRef();
- for ($count = 0; $count < strlen($value2); $count++) {
- $value1 .= $value2[$count];
- }
- $memObject1->touch();
- $memObject1->unlock();
- $memObject2->unlock();
- ]]></programlisting></para>
- </sect3>
- <sect3 id="zend.memory.memory-objects.api.unlock">
- <title>La méthode unlock()</title>
- <programlisting language="php"><![CDATA[
- public function unlock();
- ]]></programlisting>
- <para>
- La méthode <methodname>unlock()</methodname> déverrouille l'objet quand il n'est plus
- nécessaire de maintenir verrouillé. Voir l'exemple ci-dessus.
- </para>
- </sect3>
- <sect3 id="zend.memory.memory-objects.api.isLocked">
- <title>La méthode isLocked()</title>
- <programlisting language="php"><![CDATA[
- public function isLocked();
- ]]></programlisting>
- <para>
- La méthode <methodname>isLocked()</methodname> peut être utilisée pour vérifier si l'objet
- est verrouillé. Il retourne <constant>TRUE</constant> si l'objet est verrouillé, ou
- <constant>FALSE</constant> s'il n'est pas verrouillé. C'est toujours <constant>TRUE</constant> pour
- les objets "verrouillés" et peut être <constant>TRUE</constant> ou <constant>FALSE</constant> pour
- des objets "mobiles".
- </para>
- </sect3>
- </sect2>
- </sect1>
|