-
Notifications
You must be signed in to change notification settings - Fork 164
Expand file tree
/
Copy pathglobals.xml
More file actions
150 lines (133 loc) · 3.94 KB
/
Copy pathglobals.xml
File metadata and controls
150 lines (133 loc) · 3.94 KB
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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d58ee8eaaa7f716c51f66f5f1058ab3c42376d98 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes Maintainer: mikaelkael -->
<refentry role="variable" xml:id="reserved.variables.globals" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>$GLOBALS</refname>
<refpurpose>Référence toutes les variables disponibles dans un contexte global</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<para>
Un tableau associatif contenant les références sur toutes les variables
globales actuellement définies dans le contexte d'exécution global du
script. Les noms des variables sont les index du tableau.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example xml:id="variable.globals.basic">
<title>Exemple avec <varname>$GLOBALS</varname></title>
<programlisting role="php">
<![CDATA[
<?php
function test()
{
$foo = "variable locale";
echo '$foo dans le contexte global : ' . $GLOBALS["foo"] . "\n";
echo '$foo dans le contexte courant : ' . $foo . "\n";
}
$foo = "Exemple de contenu";
test();
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
$foo dans le contexte global : Exemple de contenu
$foo dans le contexte courant : variable locale
]]>
</screen>
</example>
</para>
<warning>
<para>
À partir de PHP 8.1.0, l'accès en écriture au tableau entier
<varname>$GLOBALS</varname> n'est désormais plus supporté :
<example xml:id="variable.globals.entire_write_error">
<title>Écrire au tableau entier <varname>$GLOBALS</varname> résultera en une erreur.</title>
<programlisting role="php">
<![CDATA[
<?php
// Génère une erreur lors de la compilation :
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...et toute autre opération d'écriture/lecture-écriture sur $GLOBALS
?>
]]>
</programlisting>
</example>
</para>
</warning>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
¬e.is-superglobal;
<note>
<title>Disponibilité des variables</title>
<para>
Contrairement à toutes les autres
<link linkend="language.variables.superglobals">superglobales</link>,
<varname>$GLOBALS</varname> a toujours été disponible en PHP.
</para>
</note>
<note>
<para>
À partir de PHP 8.1.0, <varname>$GLOBALS</varname> est désormais une
copie en lecture seule du <link linkend="features.gc.refcounting-basics">tableau de symbole</link>
global.
C'est-à-dire que les variables globales ne peuvent pas être modifiées via sa copie.
Auparavant, le tableau <varname>$GLOBALS</varname> était exclu du
comportement usuel par-valeur des tableaux PHP et les variables globales
pouvaient être modifiées via sa copie.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Avant PHP 8.1.0
$a = 1;
$globals = $GLOBALS; // Copie par valeur en apparence
$globals['a'] = 2;
var_dump($a); // int(2)
// À partir de PHP 8.1.0
// ceci ne modifie plus $a. Le comportement précédent violait la sémantique par valeur.
$globals = $GLOBALS;
$globals['a'] = 1;
// Pour restaurer le comportement précédent, itérer sa copie et réassigner chaque propriété à $GLOBALS.
foreach ($globals as $key => $value) {
$GLOBALS[$key] = $value;
}
?>
]]>
</programlisting>
</informalexample>
</para>
</note>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->