/
assignment.xml
255 lines (245 loc) · 7.14 KB
/
assignment.xml
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
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 43d07782b514d0c7a8487f2c74063739f302df8d Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.operators.assignment">
<title>Les opérateurs d'affectation</title>
<titleabbrev>Affectation</titleabbrev>
<simpara>
L'opérateur d'affectation le plus simple est le signe "=".
Le premier réflexe est de penser que ce signe veut dire
"égal à". Ce n'est pas le cas. Il signifie que
l'opérande de gauche se voit affecter la valeur de
l'expression qui est à droite du signe égal.
</simpara>
<para>
La valeur d'une expression d'affectation est la valeur
affectée. Par exemple, la valeur de l'expression
'<literal>$a = 3</literal>' est la valeur 3. Cela permet d'utiliser
des astuces telles que :
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = ($b = 4) + 5;
// $a est maintenant égal à 9, et $b vaut 4.
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
En plus du simple opérateur d'affectation, il existe des
"opérateurs combinés" pour tous les opérateurs
<link linkend="language.operators">arithmétiques</link>,
l'union de tableaux et pour les opérateurs sur les chaînes de caractères.
Cela permet d'utiliser la valeur d'une variable dans une expression et
d'affecter le résultat de cette expression à cette variable.
Par exemple :
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$a += 5; // affecte la valeur 8 à la variable $a correspond à l'instruction '$a = $a + 5';
$b = "Bonjour ";
$b .= " tout le monde!"; // affecte la valeur "Bonjour tout le monde!" à
// la variable $b
// identique à $b = $b." tout le monde!";
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
On peut noter que l'affectation copie le contenu de la variable originale
dans la nouvelle variable (affectation par valeur), ce qui fait que les
changements de valeur d'une variable ne modifieront pas la valeur de
l'autre. Cela peut se révéler important lors de la copie d'un grand tableau
durant une boucle.
</para>
<para>
Une exception au comportement d'affectation par valeur en PHP est le type
<type>object</type>, ceux-ci sont affectés par référence.
La copie d'objet doit être explicitement demandée grâce au mot-clé
<link linkend="language.oop5.cloning">clone</link>.
</para>
<sect2 xml:id="language.operators.assignment.reference">
<title>Affectation par référence</title>
<para>
L'affectation par référence est aussi supportée, au moyen de la syntaxe
"<computeroutput>$var = &$othervar;</computeroutput>". L'affectation par
référence signifie que les deux variables pointent vers le même conteneur de
donnée, rien n'est copié nulle part.
</para>
<para>
<example>
<title>Affectation par référence</title>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$b = &$a; // $b est une référence à $a
print "$a\n"; // affiche 3
print "$b\n"; // affiche 3
$a = 4; // change $a
print "$a\n"; // affiche 4
print "$b\n"; // affiche 4 aussi, car $b est une référence à $a, qui a été
// changée
?>
]]>
</programlisting>
</example>
</para>
<para>
L'opérateur <link linkend="language.oop5.basic.new">new</link>
retourne une référence automatiquement, de ce fait, assigner le résultat de
<link linkend="language.oop5.basic.new">new</link> par référence est une erreur
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
class C {}
$o = &new C;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Parse error: syntax error, unexpected 'new' (T_NEW) in …
]]>
</screen>
</informalexample>
</para>
<para>
Plus d'informations sur les références et leurs utilisations possibles peuvent être
trouvées dans la section du manuel <link linkend="language.references">Les références
expliquées</link>.
</para>
</sect2>
<sect2 xml:id="language.operators.assignment.arithmetic">
<title>Les opérateurs d'affectation arithmétiques</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Exemple</entry>
<entry>Equivalent</entry>
<entry>Opération</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a += $b</entry>
<entry>$a = $a + $b</entry>
<entry>Addition</entry>
</row>
<row>
<entry>$a -= $b</entry>
<entry>$a = $a - $b</entry>
<entry>Soustraction</entry>
</row>
<row>
<entry>$a *= $b</entry>
<entry>$a = $a * $b</entry>
<entry>Multiplication</entry>
</row>
<row>
<entry>$a /= $b</entry>
<entry>$a = $a / $b</entry>
<entry>Division</entry>
</row>
<row>
<entry>$a %= $b</entry>
<entry>$a = $a % $b</entry>
<entry>Modulo</entry>
</row>
<row>
<entry>$a **= $b</entry>
<entry>$a = $a ** $b</entry>
<entry>Exponentiation</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 xml:id="language.operators.assignment.bitwise">
<title>Opérateurs d'affectation bits à bits</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Exemple</entry>
<entry>Equivalent</entry>
<entry>Opération</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a &= $b</entry>
<entry>$a = $a & $b</entry>
<entry>Opérateur And</entry>
</row>
<row>
<entry>$a |= $b</entry>
<entry>$a = $a | $b</entry>
<entry>Opérateur Or</entry>
</row>
<row>
<entry>$a ^= $b</entry>
<entry>$a = $a ^ $b</entry>
<entry>Opérateur Xor</entry>
</row>
<row>
<entry>$a <<= $b</entry>
<entry>$a = $a << $b</entry>
<entry>Décalage à gauche</entry>
</row>
<row>
<entry>$a >>= $b</entry>
<entry>$a = $a >> $b</entry>
<entry>Décalage à droite</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 xml:id="language.operators.assignment.other">
<title>Autres opérateurs d'affectation</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Exemple</entry>
<entry>Equivalent</entry>
<entry>Opération</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a .= $b</entry>
<entry>$a = $a . $b</entry>
<entry>Concaténation d'une chaîne de caractères</entry>
</row>
<row>
<entry>$a ??= $b</entry>
<entry>$a = $a ?? $b</entry>
<entry>Opérateur de coalescence nul</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 role="seealso" xml:id="language.operators.assignment.see-also">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="language.operators.arithmetic">les opérateurs arithmétiques</link></member>
<member><link linkend="language.operators.bitwise">les opérateurs bits à bits</link></member>
<member><link linkend="language.operators.comparison.coalesce">les opérateurs de coalescence nul</link></member>
</simplelist>
</para>
</sect2>
</sect1>