File: Zend_Memory-MemoryObjects.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (235 lines) | stat: -rw-r--r-- 9,080 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
<?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>